如何从参考算术编码结果中获取字节数组数据

时间:2017-11-10 07:48:31

标签: java

我正在尝试使用Java实现算术编码,我找到了这个项目:Reference-arithmetic-coding。但它的'输入和输出都是文件,我想得到的字节数是AdaptiveArithmeticCompress.compress()的编码结果。这是我做的: 我在名为AdaptiveArithmeticCompress的课程AACompress中添加了一个函数:

public static byte[] AACompress(short[] delta) throws  IOException{
    byte[] bytedelta = TypeConversion.ShortToByte_little(delta);
    ByteArrayInputStream bis = new ByteArrayInputStream(bytedelta);
    BitOutputStream out = new BitOutputStream(new ByteArrayOutputStream());

    compress(bis,out);
    return out.toBytearray();
}

并创建out.toBytearray()以将outputstream转换为字节数组。

public byte[] toBytearray() {
    ByteArrayOutputStream baos = (ByteArrayOutputStream) output;
    return baos.toByteArray();
}

但是当我将结果字节数组与AdaptiveArithmeticCompress.compress(InputStream in, BitOutputStream out)的输出结果文件进行比较时,我发现

short[] delta = ...;
byte[] coding = AdaptiveArithmeticCompress.AACompress(delta);

coding.lengthout.buf.length少1,out.buf的最后一个字节丢失,因此编码结果错误。 我是Java的新手,这个问题让我困惑了好几天。谁能帮我?非常感谢。

1 个答案:

答案 0 :(得分:0)

我通过在close

中添加ArithmeticEncoder方法解决了这个问题
public void close() throws IOException {
    output.close();
}

丢失的字节已添加到outputstream中。