ArrayList <Byte> vs Java中的String

Dan*_*her 4 java string arraylist lzw

我正在实现LZW算法.我已经成功地为字符串和文本文件实现了它,并且我正在修改我的代码以使用二进制文件,例如图像或可执行文件(因为我无法将这些文件作为字符串读取).

我已经用String类型替换了我的代码中的ArrayList<Byte>类型.我的代码现在正确压缩和解压缩二进制文件,但它至少慢了10倍!在速度是关键因素的压缩应用中,这是不可接受的.

我是否正确替换ArrayList<Byte>String.有类似功能的更快的替代方案吗?注意,LZW算法需要数组大小调整,因此标准arrays[]不适合.

问候.

SLa*_*aks 6

使用List<Byte>will将每个字节框放入一个单独的对象实例中.
总的来说,这是你可以为性能做的最糟糕的事情之一.

相比之下,数组或字符串可以占用固体内存块.

相反,您应该根据需要使用ByteArrayOutputStream,或byte[]直接使用并调整大小(您可以为此创建一个包装类)

  • +1"固体内存块"可能是关键所在.像压缩这样的计算密集型操作可能会从增加的内存局部性中获益很多. (2认同)