84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
所有的IO操作都是通过字节完成的,系统底层不存在字符这个概念,Java中 InputStream 和 OutputStream 中只有字节操作方法,没有字符串方法。所有的可以进行字符串读写的流封装对象,都是上层实现,方便使用而已。
具体选择那种流来使用,他们之间效率如何,都要看具体场景和功能实现的目的,没有单纯的好坏。
以你上面的两个例子,效果完全是一样的,只不过你选择使用 BufferedWriter 和 BufferedReader 的内部实现还是字节实现 Buffer 缓冲而已。
Java 是开源的,建议多看源码,熟悉内部原理和实现。
两者的区别就是:字节流可以既可以操作文本文件,也可以操作非文本文件,如一些二进制数据(图片,视频,对象),而字符流只能操作文本。这也是两者的适用情况,如何决定该使用哪种数据流读写取决于要读写的数据类型,若是文本本件,当然选择字符流,因为我们都知道字符流每次处理的单元为2个字节的Unicode字符,而字节流每次处理的是一个,若是非文本文件,那么就只能用字节流了,这个时候就不能单纯的看谁的效率高了。我想这也是为什么要有两者数据流的原因吧。
对小文件读写,几乎无差异。对大文件读写,Buffer比较好些。对于多次读写硬盘,好的缓存机制能快些。比方说60GB文件,你肯定分批(甚至分行),多次读写。其次,你想处理字符,还是字节,根据需要选择。
所有的IO操作都是通过字节完成的,系统底层不存在字符这个概念,Java中 InputStream 和 OutputStream 中只有字节操作方法,没有字符串方法。所有的可以进行字符串读写的流封装对象,都是上层实现,方便使用而已。
具体选择那种流来使用,他们之间效率如何,都要看具体场景和功能实现的目的,没有单纯的好坏。
以你上面的两个例子,效果完全是一样的,只不过你选择使用 BufferedWriter 和 BufferedReader 的内部实现还是字节实现 Buffer 缓冲而已。
Java 是开源的,建议多看源码,熟悉内部原理和实现。
两者的区别就是:字节流可以既可以操作文本文件,也可以操作非文本文件,如一些二进制数据(图片,视频,对象),而字符流只能操作文本。这也是两者的适用情况,如何决定该使用哪种数据流读写取决于要读写的数据类型,若是文本本件,当然选择字符流,因为我们都知道字符流每次处理的单元为2个字节的Unicode字符,而字节流每次处理的是一个,若是非文本文件,那么就只能用字节流了,这个时候就不能单纯的看谁的效率高了。我想这也是为什么要有两者数据流的原因吧。
对小文件读写,几乎无差异。
对大文件读写,Buffer比较好些。对于多次读写硬盘,好的缓存机制能快些。比方说60GB文件,你肯定分批(甚至分行),多次读写。
其次,你想处理字符,还是字节,根据需要选择。