2

ZLibサーバー (C++) では、関数を使用してバイナリ データが圧縮されます。

compress2()

クライアント (Java) に送信されます。クライアント側 (Java) では、次のコード スニペットを使用してデータを解凍する必要があります。

public static String unpack(byte[] packedBuffer) {
    InflaterInputStream inStream = new InflaterInputStream(new ByteArrayInputStream( packedBuffer);
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    int readByte;
    try {
        while((readByte = inStream.read()) != -1) {
            outStream.write(readByte);
        }
    } catch(Exception e) {
        JMDCLog.logError(" unpacking buffer of size: " + packedBuffer.length);
        e.printStackTrace();
    // ... the rest of the code follows
}

問題は、 while ループを読み込もうとすると、常にスローされることです。

java.util.zip.ZipException: 格納されたブロックの長さが無効です

他の考えられる原因を確認する前に、compress2 で片側を圧縮し、上記のコードを使用して反対側を解凍できるので、これを問題として排除できるか教えてください。また、誰かがここで何が間違っているのかについて手がかりを持っている場合 (私はここであまり多くのコードを提供していないことを知っていますが、プロジェクトはかなり大きいです.

ありがとう。

4

1 に答える 1

0

問題は unpack メソッドではなく、packedBuffer コンテンツにあると思います。アンパックは正常に動作します

public static byte[] pack(String s) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    DeflaterOutputStream dout = new DeflaterOutputStream(out);
    dout.write(s.getBytes());
    dout.close();
    return out.toByteArray();
}

public static void main(String[] args) throws Exception {
    byte[] a = pack("123");
    String s = unpack(a);   // calls your unpack
    System.out.println(s);
}

出力

123
于 2013-03-26T09:51:45.440 に答える