我的总体项目是创建一棵树并使用 Huffman 编码对给定文件进行编码和解码。我正需要解码我的文件。为此,我必须遍历我的霍夫曼树,直到到达最底部的叶子,然后返回由该叶子表示的字节。我根据给方法的位串遍历树。AKA 如果当前位为 1,我会转到树中的 childOne,依此类推。问题是我不断收到outOfMemory
错误。有什么办法可以优化这段代码,使其不会使用太多的内存?
public static int decode(List<Integer> bitArray, HuffmanNode root, int startingPosition,
ArrayList<Byte> finalArray)
{
HuffmanNode childOne;
HuffmanNode childZero;
int currentBit = bitArray.get(startPosition);
byte newByte;
childOne = root.getChildOne();
childZero = root.getChildZero();
if(childOne == null && childZero == null)
{
finalArray.add(root.getByteRepresented());
return startPosition;
}
else if(currentBit == 1)
{
startPosition++;
startPosition = decode(bitArray,childOne,startPosition,finalArray);
}
else
{
startPosition++;
startPosition = decode(bitArray,childZero,startPosition,finalArray);
}
return startPosition;
}
我需要知道它结束的位数组中的位置以及将指定的字节放入数组中,这就是为什么我将字节放入方法内的数组中并返回和 int。基本上,有没有更好的方法来完成这项工作?