阿神2017-04-17 16:45:03
所有的IO操作都是通过字节完成的,系统底层不存在字符这个概念,Java中 InputStream 和 OutputStream 中只有字节操作方法,没有字符串方法。所有的可以进行字符串读写的流封装对象,都是上层实现,方便使用而已。
具体选择那种流来使用,他们之间效率如何,都要看具体场景和功能实现的目的,没有单纯的好坏。
以你上面的两个例子,效果完全是一样的,只不过你选择使用 BufferedWriter 和 BufferedReader 的内部实现还是字节实现 Buffer 缓冲而已。
Java 是开源的,建议多看源码,熟悉内部原理和实现。
天蓬老师2017-04-17 16:45:03
两者的区别就是:字节流可以既可以操作文本文件,也可以操作非文本文件,如一些二进制数据(图片,视频,对象),而字符流只能操作文本。这也是两者的适用情况,如何决定该使用哪种数据流读写取决于要读写的数据类型,若是文本本件,当然选择字符流,因为我们都知道字符流每次处理的单元为2个字节的Unicode字符,而字节流每次处理的是一个,若是非文本文件,那么就只能用字节流了,这个时候就不能单纯的看谁的效率高了。我想这也是为什么要有两者数据流的原因吧。
迷茫2017-04-17 16:45:03
对小文件读写,几乎无差异。
对大文件读写,Buffer比较好些。对于多次读写硬盘,好的缓存机制能快些。比方说60GB文件,你肯定分批(甚至分行),多次读写。
其次,你想处理字符,还是字节,根据需要选择。