1、字节流和字符流的区别仅仅是操作单位不一样。
2、InputStream 和 Reader 是所有输入流的基类, 他们都是抽象类, 本身不能创建实例, 但是他们是所有输入流的模板。
3、一般来说处理字符或字符串时使用字符流, 处理字节或二进制对象时应使用字节流。
4、字符流必须关闭资源, 因为它中间有缓冲区; 而字节流不需要! 但是一般都会(最后)关闭资源!首先来讲安字节流:
字节流主要是操作 byte(字节)的类型数据:
字节输出流: OutputStream
字节输入流: InputStream
再来看字符流
Java 中的字符是 Unicode 编码,是双字节的,1 个字符 等于 2 个字节;使用字节来处理字符文本就不太方便了,此时可以考虑使用字符流;
字符流主要是操作 char 的类型数据:
字符输出流: Writer
字符输入流: Reader
最后还要注意这一点:
字节流和字符流在使用上的代码结构都是非常类似的, 但在进行字符流操作的时候会使用到缓冲区(内存中),
而字节流操作的时候是不会使用
到缓冲区的。
在输出的时候, OutputStream 类即使最后没有关闭内容也可以输出。 但是如果是 Writer
的话, 则如果不关闭, 最后一条内容是无法输出的, 因为所有的内容都是保存在了缓冲区
之中, 每当调用了 close() 方法就意味着清空缓冲区了。 那么可以证明字符流确实使用了缓冲区:
字节流: 程序 → 文件
字符流: 程序 → 缓冲区(内存中) → 文件
如果现在字符流即使不关闭也可以完成输出的话, 则必须强制性清空缓冲区,使用flush()方法。
依我来看,两者相比, 肯定使用字节流更加的方便, 而且在程序中像图片、 MP3 等都是采用字节的方式的保存, 那么肯定字节流会比字符流使用的更广泛。
但是需要说明的是, 但是如果要是想操作中文的话, 字符流肯定是最好使的。(字节流的话
可能会出现乱码(一个汉字分成了两份)!)
|