我正在编写一个读取文件的程序(使用自定义缓冲区,8KB),然后在该缓冲区中找到一个关键字。由于Java提供了两种类型的流:character& byte,我使用byte[]
和char[]
实现了缓冲。
我只是想知道,哪个会更快,性能更好,因为char
为2 byte
,并且当使用Reader
来阅读char[]
时,{{ 1}}将执行从Reader
转换回byte
,我认为这可能比仅使用char
慢。
答案 0 :(得分:6)
使用字节数组会更快:
您没有字符到字符解码步骤,这至少是一个复制循环,可能更多取决于用于解码的字符集。
字节数组占用的空间更少,因此可以节省GC /初始化中的CPU周期。
然而:
除非您正在搜索大文件,否则差异不太可能很大。
如果输入文件未以8位字符集编码,则字节数组方法可能失败。即使它有效(与UTF-8和UTF-16一样),也存在跨越缓冲区边界匹配字符的潜在问题。
(UTF-8和UTF-16的逐字节处理的原因在于编码可以很容易地区分第一个单元(字节或短)和编码字符的后续单元。)
答案 1 :(得分:1)
如果是正在读取的二进制文件,则使用字节数组。
如果它是一个文本文件,你将在以后使用像字符串这样的内容,那么你应该使用一个char数组。
答案 2 :(得分:0)
这个堆栈溢出问题file-streaming-in-java讨论了在java中有效地传输文件。
在大型文件上,您很快就可以使用仅使用字节的速度,因此如果您可以通过字节解码模式,您可以明确地获得一些宝贵的周期。
如果您的文件很小,或者您没有这么多,也许这不值得。