io流总结

Java中按照流的方向分为:输入流和输出流。

按照处理数据单位分为:字节流和字符流。

按照实现功能分为:节点流和处理流。

输出流:

输入流:

字节流:一次读入或者读出8位二进制。

字符流:一次读出或者读入16位二进制。

两者原理是相同的,后缀为Stream的是字节流,后缀是Reader或者Writer是字符流。

字节流:处理字节数据的流对象。设备上的数据无论是图片。文字他们都是以二进制存储的。二进制最终都是以一个8位为数据单元的体现,所以计算机的最小数据单元就是字节,意味着自救刘可以处理设备上的所有数据,所以字节流一样可以处理字符数据。

节点流:直接与数据源相连接。读入或者读出。数据源====节点流===》程序。

层使用节点流读写不方便,才引入了处理流。

处理流:与节点流一款实用,在节点流的基础上,再套接一层,套接再节点流上的就是处理流。

字符流:reader和writer用来读取和写入字符流的抽象类。

流的操作规律

1.明确源和目的。

数据源:用inputstream和reader来读取。

数据汇:用outputstream和writer来写入。

2.操作的数据是否为纯文本数据?

是:数据源:reader。

数据汇用writer

不是:数据源inputstream

数据汇用outputstream

3.需要在基本操作附加其他功能吗?如缓冲。

如果需要就进行装饰。 /记住,只要一读取键盘录入,就用这句话。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

 

字节流与字符流的区别

 

字节流和字符流使用是非常相似的,那么除了操作代码的不同之外,还有哪些不同呢?

 

字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的

 

字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容

 


 

那开发中究竟用字节流好还是用字符流好呢?

 

在所有的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会形成的,所以使用字节的操作是最多的。

 


 

如果要java程序实现一个拷贝功能,应该选用字节流进行操作(可能拷贝的是图片),并且采用边读边写的方式(节省内存)。

 

posted @ 2017-11-22 15:22  就是这样_zzzz  阅读(109)  评论(0编辑  收藏  举报