1

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

来源:甲骨文文档

4

3 回答 3

4

Oracle 实际上在说的是“请不要重新实现轮子!”。

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

  • 你在解析文本吗?使用字符流,它可以理解文本编码问题。
  • 你在解析 XML 吗?使用 SAX 或其他一些库。
  • 你在解析图像吗?使用 ImageIO 类。
  • 你是把东西从A复制到B吗?使用 apache commons-io FileUtils。

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

于 2012-07-06T08:34:53.423 回答
3

从您引用的文字中:

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

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

于 2012-07-06T08:35:50.437 回答
2

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

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

于 2012-07-06T08:33:31.527 回答