gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:03 24 4
gpt4 key购买 nike

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

我只是想知道,哪个更快更好地提高性能,因为 char 是 2 byte 并且在使用 Reader 读取时char[]Reader 将执行从 bytechar 的转换,我认为这可能会使速度变慢而不是仅使用 byte[]

最佳答案

使用字节数组会更快:

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

  • 字节数组将占用更少的空间,从而节省 GC/初始化中的 CPU 周期。

但是:

  • 除非您搜索的是大文件,否则差异不大。

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

(按字节处理 UTF-8 和 UTF-16 的原因是编码可以轻松区分编码字符的第一个单元(字节或短字符)和后续单元。)

关于byte[] 与文件流的 char[] 的 Java 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com