java中io字符流与字节流异同学习笔记

来源:互联网 发布:智能营销软件 编辑:程序博客网 时间:2024/06/14 22:57


1:字节流: stream结尾都是字节流    ; 字符流: reader和writer结尾都是字符流

字节流与字符流的桥梁为OutputStreamWriter、InputStreamReader

缓冲字符流的为BufferedWriter、BufferedReader



相同点:

InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new,要使用他们对应的子类实现。

字节流与字符流的区别

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

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

3、Reader类的read()方法返回类型为int :作为整数读取的字符(占两个字节共16位),范围在 0 到 65535 之间(0x00-0xffff),如果已到达流的末尾,则返回 -1
inputStream的read()虽然也返回int,但由于此类是面向字节流的,一个字节占8个位,所以返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。因此对于不能用0-255来表示的值就得用字符流来读取!比如说汉字.

4、字节流与字符流主要的区别是他们的的处理方式

字节流:处理字节和字节数组或二进制对象;

字符流:处理字符、字符数组或字符串。

 

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

1、字符(Reader和 Writer):中文,字符是只有在内存中才会形成的,操作字符、字符数组或字符串,

2、字节(InputStream和OutputStream):音频文件、图片、歌曲,所有的硬盘上保存文件或进行传输的时候,操作字节和字节数组或二进制对象,

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


5:InputStreamReader和OutputStreamWriter:

  优秀博客引用:http://blog.csdn.net/liuhenghui5201/article/details/8292552