用于文件流的byte []与char []的Java性能

时间:2011-08-15 03:59:48

标签: java io

我正在编写一个读取文件的程序(使用自定义缓冲区,8KB),然后在该缓冲区中找到一个关键字。由于Java提供了两种类型的流:character& byte,我使用byte[]char[]实现了缓冲。

我只是想知道,哪个会更快,性能更好,因为char为2 byte,并且当使用Reader来阅读char[]时,{{ 1}}将执行从Reader转换回byte,我认为这可能比仅使用char慢。

3 个答案:

答案 0 :(得分:6)

使用字节数组会更快:

  • 您没有字符到字符解码步骤,这至少是一个复制循环,可能更多取决于用于解码的字符集。

  • 字节数组占用的空间更少,因此可以节省GC /初始化中的CPU周期。

然而:

  • 除非您正在搜索大文件,否则差异不太可能很大。

  • 如果输入文件未以8位字符集编码,则字节数组方法可能失败。即使它有效(与UTF-8和UTF-16一样),也存在跨越缓冲区边界匹配字符的潜在问题。

(UTF-8和UTF-16的逐字节处理的原因在于编码可以很容易地区分第一个单元(字节或短)和编码字符的后续单元。)

答案 1 :(得分:1)

如果是正在读取的二进制文件,则使用字节数组。

如果它是一个文本文件,你将在以后使用像字符串这样的内容,那么你应该使用一个char数组。

答案 2 :(得分:0)

这个堆栈溢出问题file-streaming-in-java讨论了在java中有效地传输文件。

我特别喜欢this reference article

在大型文件上,您很快就可以使用仅使用字节的速度,因此如果您可以通过字节解码模式,您可以明确地获得一些宝贵的周期。

如果您的文件很小,或者您没有这么多,也许这不值得。