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

Gen*_*zer 6 java io

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

我只是想知道,这将是对性能更快,更好,因为char是2 byte和使用时Reader阅读起来char[]时,Reader将执行转换从后bytechar,我认为可以把它比仅使用较慢byte[].

Ste*_*n C 6

使用字节数组会更快:

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

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

然而:

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

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

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