![](/img/trans.png)
[英]What's the difference Between Character Stream and Byte Stream in Java and Char vs Byte in C?
[英]Java performance of byte[] vs. char[] for file stream
我正在编写一个读取文件的程序(使用自定义缓冲区,8KB),然后在该缓冲区中找到一个关键字。 由于 Java 提供了两种类型的流:字符和字节,我已经使用byte[]
和char[]
来实现这个缓冲。
我只是想知道,这对性能来说会更快更好,因为char
是 2 byte
,当使用Reader
读取char[]
时, Reader
将执行从byte
转换回char
,我认为这可能会比使用更慢只有byte[]
。
使用字节数组会更快:
您没有字节到字符解码步骤,这至少是一个复制循环,并且可能更多取决于用于进行解码的字符集。
字节数组将占用更少的空间,从而节省 GC / 初始化中的 CPU 周期。
然而:
除非您正在搜索大文件,否则差异不大。
如果输入文件未以 8 位字符集编码,则字节数组方法可能会失败。 即使它有效(就像 UTF-8 和 UTF-16 一样),跨越缓冲区边界的匹配字符也存在潜在问题。
(按字节处理对 UTF-8 和 UTF-16 起作用的原因是编码可以很容易地区分第一个单元(字节或短)和编码字符的后续单元。)
如果它是您正在阅读的二进制文件,请使用字节数组。
如果它是一个文本文件,并且您稍后将使用字符串等内容,那么您应该使用 char 数组。
这个堆栈溢出问题file-streaming-in-java讨论了在 java 中有效地流式传输文件。
我特别喜欢这篇参考文章
在大文件上,您很快就获得了仅使用字节的速度优势,因此如果您可以通过字节解码模式,您肯定可以获得一些宝贵的周期。
如果您的文件很小,或者您没有那么多文件,那么可能不值得麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.