为什么在Java中应该避免IO作为Byte



CopyBytes看起来像一个普通程序,但它实际上代表了一种应该避免的低级I/O。已经提到,尽管所有流都建立在bytestream本身上,但字符、对象等的流应该是首选的。这背后的原因是什么?这与安全管理器和性能相关的问题有关吗?

来源:oracle文档

Oracle实际上在说"请不要重新实现轮子!"。

您几乎不应该需要常规字节流:

  • 你在分析文本吗?使用了解文本编码问题的字符流
  • 你在分析XML吗?使用SAX或其他库
  • 你在分析图像吗?使用ImageIO类
  • 你在把东西从A复制到B吗?使用apache commons io FileUtils

在极少数情况下,您实际上需要使用字节流。

根据您引用的文本:

CopyBytes看起来像是一个普通的程序,但它实际上代表了一种应该避免的低级I/O由于xanadu.txt包含字符数据,最好的方法是使用字符流,如下一节所述。还有用于更复杂数据类型的流。字节流应仅用于最基本的I/O。

通常,您不希望直接使用字节。有更高级别的API,例如读取文本(即必须从字节中解码的字符数据)。

它可以工作,但效率非常低:它复制的每个字节需要2个方法调用。

相反,您应该使用一个缓冲区(几千字节,最佳大小因您读取的内容和其他条件而异),并在每次方法调用时读取/写入整个缓冲区(或尽可能多)。

相关内容

  • 没有找到相关文章

最新更新