流的基本工作原理

1、字节流和字符流
字节流是一个字节一个字节的形式读取
字符流是两个字节两个字节的形式读取

 

FileInputStream FileOutputStream为例

 

如果wirte(256) 在read()那么读取出来的是0,
因为,256站九位,后八位都是0,wirte就是写入一个字节,那么他就写入的00000000,所以读取到的就是0。

如果经过包装成Dataoutpstream,那么wirteInt(256),他就是按照int类型,占四个字节,写入四个字节,00000000,00000000,00000001,00000000


当然读取出来的时候也是要按照int类型读取,如果只读取前面两位那么就是0

同样的,字符也会转成相映的二进制来写入


如果写入的时候按照数字写入,读取的时候按照字符读取,那么就出现了乱码
FileInputStream fis = new FileInputStream("d:/ccc.txt");
FileOutputStream fos  = new FileOutputStream("d:/ccc.txt");
DataOutputStream dos = new DataOutputStream ((fos));
BufferedReader br = new BufferedReader (new InputStreamReader(fis));
 dos.writeDouble(1222.111);//按照双精度写入文件
 System.out.println(br.readLine());//reanLine是返回字符串。

2、数据流方便我们操作各种类型数据
字节数组流方便我将数据转成字节数组
缓冲流读取更加高效
包装的作用
(1)、提高效率,如BufferedReader
(2)、处理不同数据类型,如DataOutputStream的各种方法


3、标准输入流和标准输出流
他们就是根据方法重载,根据传入的参数数据的不同,来调用不容的流,这些流就按照该数据类型的格式输入和输出。
PrintWriter 标准输出流,可以输出各种类型数据,但是注意,我们读取的时候,读取数据的顺序要一致。


4、节点流连接好了需要传输数据的地点。
处理流嵌套在节点流上为我们提供了各种方便我们操作的方法。

 

5、我们只有按照数据原有的形式输入和输出,才能正确的处理数据。

我们在一个流中,按照什么格式输出,我们在读取的时候就要按照什么格式读取出来
比如,往一个文件里面先写入一int,再写入一个double
那么读取的时候就要先读readInt再读readDouble

总结:
 1、int类型占四个字节,那么我们读取的时候都要按照int的形式操作,其他类型也是一样
 2、FileOutputStream的write(b)方法,是写入b的二进制形式的右边第一个字节,他只写入一个字节。
 3、懂了第二点那么其他的流的方法也就是一样的,只是他们读取的方式不同可以处理不同的数据。
 

 

 

 

你可能感兴趣的:(java io 流 流的原理)