io流整理和归纳

io流:

java有两种类型的流:字节流和字符流和两种类型的流:输入流和输出流(输入和输出是相对java程序而言,磁盘和键盘等设备向程序读入文件信息就为输入,反之为输出)

InputStream 和OutputStream 是字节流的输入和输出的父类,是一个抽象类,FileInputStream、FilterInputStream 等都是对它们的继承。

相同Reader和Writer是字符流的输入和输出的父类,也是抽象类,图片后面其他类也是对它们的继承。

字节流和字符流的区别:

1.字节流默认不使用缓冲区;字符流使用缓冲区。 (缓冲区是内存区域,字节流能够在程序完成后立即完成输入输出,字符流需要flush()完成)

2.字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的,但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的Encode来处理,也就是要进行字符集的转化。这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联。

3.底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入。字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便。

输入流的简单应用

package IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import java.io.InputStream;

public class IoTest {
    public static void main(String[] args) throws Exception {
        /* 读取io.txt文本的内,在程序中逐字逐句的输出 */
        String filename = "E:" + File.separator + "Io.txt";
        File f = new File(filename);
        /* 读取文件分为两步 */
        /* 1.系统自动将文件的数据转化为流 */
        /* 2.通过read读取流的内部数据 */
        System.out.println(f.length());
        InputStream in = new FileInputStream(f);
        byte[] b = new byte[(int) f.length()];
        int i = in.read(b);
        in.close();
        System.out.println(new String(b));
    }
}

体验下同情景下(假若此时不知道文件的大小)以及不同read的参数情况的感受

package IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import java.io.InputStream;

public class IoTest {
    public static void main(String[] args) throws Exception {
        /* 读取io.txt文本的内,在程序中逐字逐句的输出 */
        String filename = "E:" + File.separator + "Io.txt";
        File f = new File(filename);
        /* 读取文件分为两步 */
        /* 1.系统自动将文件的数据转化为流 */
        /* 2.通过read读取流的内部数据 */
        InputStream in = new FileInputStream(f);
        byte[] b = new byte[1024];
        int temp = 0;
        int count  = 0 ;
        while((temp = in.read())!=-1) {/*read将内部数据一个个byte的读取给temp,读取为空时返回-1*/
            b[count]= (byte) temp;
            count++;
        }
        in.close();
        System.out.println(new String(b));
    }
}

/*如果把InputStream当做吸管,DataInputStream就是导水管,将吸管进行包装成导水管*/
DataInputStream dataIn = new DataInputStream(in);

输出流和输入流同时应用(文件的复制)

package IO;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class IoTest {
	public static void main(String[] args) throws Exception {

		String filename1 = "E:" + File.separator + "Io.txt";
		String filename2 = "E:" + File.separator + "Io2.txt";
		File f1 = new File(filename1);
		File f2 = new File(filename2);
		InputStream in = new FileInputStream(f1);
		OutputStream out = new FileOutputStream(f2);
		int temp = 0;
		if(in != null&&out != null) {
			while((temp=in.read())!=-1) {
				out.write(temp);
			}
		}
		in.close();
		out.close();
	}
}

  

原文地址:https://www.cnblogs.com/JTrun/p/10843173.html

时间: 2024-08-29 19:42:36

io流整理和归纳的相关文章

io流整理

IO流的3种分类方式 1.方向:输入流.输出流 2.数据单位:字节流.字符流 3.功能:节点流.处理流程 IO流的4个抽象类 字节流:InputStream.OutputStream 字符流:Reader.Writer InputStream方法:   int read()—>读取一个字节以整数形式返回,如返回-1已到输入流末尾 close()—>关闭流,释放内存资源 long skip(long n)—>跳过n个字节不读 OutputStream方法:write(int b)—>

J2SE知识点归纳笔记(七)---Java IO Part 2:获取键盘输入与IO流体系图

J2SE知识点归纳笔记(七)---Java IO Part 2:获取键盘输入与IO流体系图                                                                 --转载请注明出处:coder-pig 本节引言: 好了,上一节中我们给大家介绍了File与RandomAccessFile类的用法,本节我们还是讲一些 常用的东西,如果学过C++或者C的朋友都知道,获取键盘的输入都很简单,scanf( )和cin就可以 获得我们从控制台输入的参

Java IO流分析整理

Java IO流的分类 Java中的流,可以从不同的角度进行分类. 按流向分类: 输入流: 程序可以从中读取数据的流.输出流: 程序能向其中写入数据的流. 按数据传输单位分类: 字节流:以字节(8位二进制)为单位进行处理.主要用于读写诸如图像或声音的二进制数据. 字符流:以字符(16位二进制)为单位进行处理. 都是通过字节流的方式实现的.字符流是对字节流进行了封装,方便操作.在最底层,所有的输入输出都是字节形式的. 后缀是Stream是字节流,而后缀是Reader,Writer是字符流. 按功能

笔记之_Java整理IO流

线程重复执行: ScheduledExecutorService exec = Executors.newScheduledThreadPool(1); exec.scheduleAtFixedRate(线程名, 1, 1, TimeUnit.SECONDS); 字符输出流writer写完后要执行flush()方法,不然内容不存在 IO流:实时交互 Socket网络交互 多线程和socket合为一体 所有软件几乎都会有多线程,所有跟网络有关的必须要使用socket 大多数的程序只能循环运行单独的

关于IO流的分类整理

分类          字节输入流                      字节输出流                        字符输入流            字符输出流 抽象基类*   InputStream                    OutputStream                  Reader                 Writer 访问文件*   FileInputStream               FileOutputStream      

整理 JAVA中的IO流 (字符流和字节流两个大类)

java中的io流分为两类,字符和字节: OutputStream和InputStream字节流的父类,抽象.OutputStream有两个提供了实现的接口closable和flushable. Writer和Reader字符流的父类,抽象.实际上在流的操作中,底层与文件进行读写的都是字节流,因为即使是字符流的对象,其最终实现读写的也是用的字节流. 操作文件的字节子类FileOutputStream和FileInputStream.记住,这里面写出和读入的都是字节. class useByteS

IO流内容整理

IO流概述IO流用来处理设备之间的数据传输Java对数据的操作是通过流的方式Java用于操作流的对象都在IO包中IO流分类按照数据流向输入流 读入数据输出流 写出数据按照数据类型字节流 可以读写任何类型的文件 比如音频 视频 文本文件字符流 只能读写文本文件什么情况下使用哪种流呢?如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流.其他用字节流.如果你什么都不知道,就用字节流IO流基类概述a:字节流的抽象基类:InputStream ,OutputStream.b

io流的一些特别用法

之前我们老大给我分配了个任务,要我按数据库表结构建下类,看了一下,尼玛37张表,字段多的有二三十个,想想也是蛋疼,不过还好之前我们老师有给我们说过有一种东西叫敏捷开发,那次给我们演示了下通过io流直接建出一个类,所以我果断的把代码翻出来加工了一下,主要的原理就是先建立模型,把格式固定的代码提取出来,把中间可能会变化的部分用一些特殊单词替换(只要不跟平时的会用到的属性名相同或者包含就行),建立成一个模板(也可以直接写在方法里),然后通过io去读这个模板,并通过字符串的替换.截取等操作把这个模板中的

Java IO流详解

初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见. 首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于io的处理类,比如console类,SteamTokenzier,Externalizable接口,Serializa