CopyBytes
看起来像一个普通程序,但它实际上代表了一种应该避免的低级I/O。已经提到,尽管所有流都建立在bytestream
本身上,但字符、对象等的流应该是首选的。这背后的原因是什么?这与安全管理器和性能相关的问题有关吗?
来源:oracle文档
Oracle实际上在说"请不要重新实现轮子!"。
您几乎不应该需要常规字节流:
- 你在分析文本吗?使用了解文本编码问题的字符流
- 你在分析XML吗?使用SAX或其他库
- 你在分析图像吗?使用ImageIO类
- 你在把东西从A复制到B吗?使用apache commons io FileUtils
在极少数情况下,您实际上需要使用字节流。
根据您引用的文本:
CopyBytes看起来像是一个普通的程序,但它实际上代表了一种应该避免的低级I/O由于xanadu.txt包含字符数据,最好的方法是使用字符流,如下一节所述。还有用于更复杂数据类型的流。字节流应仅用于最基本的I/O。
通常,您不希望直接使用字节。有更高级别的API,例如读取文本(即必须从字节中解码的字符数据)。
它可以工作,但效率非常低:它复制的每个字节需要2个方法调用。
相反,您应该使用一个缓冲区(几千字节,最佳大小因您读取的内容和其他条件而异),并在每次方法调用时读取/写入整个缓冲区(或尽可能多)。