为什么要在Java中避免使用IO作为字节

时间:2012-07-06 08:30:46

标签: java stream

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

来源:oracle docs

3 个答案:

答案 0 :(得分:4)

甲骨文实际上在说的是“请不要重新实现这一点!”。

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

  • 你在解析文字吗?使用字符流来理解文本编码问题。
  • 你在解析XML吗?使用SAX或其他一些库。
  • 你在解析图像吗?使用ImageIO类。
  • 您是否正在将事物从A复制到B?使用apache commons-io FileUtils。

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

答案 1 :(得分:3)

从您引用的文字:

  

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

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

答案 2 :(得分:2)

它有效,但效率很低:它复制的每个字节都需要2个方法调用。

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