Java 字节流(OutputStream、InputStream)与字符流(Writer、Reader) 学习

首先,如果需要针对于文件的内容进行处理操作,则必须使用两类数据流:
· 字节流:OutputStream、InputStream;
· 字符流:Writer、Reader。

字节流是直接进行操作,而字符流需要经过处理。所有保存在磁盘上或者网络传输的数据都是字节,而所有的字节重新在内存之中整合在一起,就是字符。 但是不管使用的是字节流还是字符流,其基本的操作流程都是类似的,以文件操作为例:
· 通过File类设置一个要操作的文件路径;
· 通过字节流或字符流的子类为父类对象实例化;
· 进行数据的读、写处理操作; · 关闭流。

2.1、字节输出流:OutputStream
字节输出流采用的是byte数据类进行的操作处理,主要可以进行二进制数据的操作。如果要进行字节数据的输出操作使用OutputStream类完成。

2.2、字节输入流:InputStream
现在已经可以通过OutputStream实现了数据的输出操作,但是也同样可以使用程序进行数据的读取,而读取的操作可以使用InputStream类完成。首先来观察InputStream类的定义。

2.3、字符输出流:Writer
Writer是专门负责字符(char、String)输出的操作,
2.4、字符输入流:Reader
Reader属于字符的输入流抽象类,可以使用FileReader实现文件的读取处理,在Reader里面如果要进行数据的读取使用如下方法完成:public int read(char[] cbuf) throws IOException。

2.5、字节流与字符流的区别
清楚了字节流和字符流的概念之后必须面对的问题在于:开发之中使用那种数据流,以及两种数据流的区别是什么? 一句话总结:如果描述中文处理一定使用字符流,如果处理数据传输,那么使用字节流。 在使用字节流进行处理的时候不会使用到内存处理,而直接与原始数据产生交互。在使用字符流处理的时候如果没有进行关闭处理,那么所有的数据都只是会保存在缓冲区之中,而当进行了关闭处理之后会强制性的将缓冲区中的数据清空。如果现在在使用字符流的时候不希望进行关闭,那么也可以使用flush()强制清空:public abstract void flush() throws IOException。

猜你喜欢

转载自wede.iteye.com/blog/2320520