2017-07-30 5 views
0

私はjava-lzoライブラリを使用して圧縮されたバイト配列を解凍しようとしています。私はthis referenceに従っています。java-lzoライブラリを使ってlzoバイト配列を解凍するには?

私のpom.xmlするMavenの依存下に追加 -

<dependency> 
     <groupId>org.anarres.lzo</groupId> 
     <artifactId>lzo-core</artifactId> 
     <version>1.0.5</version> 
</dependency> 

I引数としてLZO圧縮されたバイト配列と宛先バイト配列の長さを受け入れる一つの方法を作成しました。

プログラム:stream.read()は常に "-1"を返すため

private byte[] decompress(byte[] src, int len) { 
    ByteArrayInputStream input = new ByteArrayInputStream(src); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 

    LzoAlgorithm algorithm = LzoAlgorithm.LZO1X; 
    lzo_uintp lzo = new lzo_uintp(len); 
    LzoDecompressor decompressor = LzoLibrary.getInstance().newDecompressor(algorithm, null); 
    LzoInputStream stream = new LzoInputStream(input, decompressor); 

    try { 
     int data = stream.read(); 
     while (data != -1) { 
      out.write(data); 
      data = stream.read(); 
     } 
     out.flush(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    return out.toByteArray(); 
} 

私は、ある時点で捕まってしまいました。私はそれがデータでいっぱいになっている入力配列をチェックしました。さらに、stream.available()メソッドを使ってチェックしましたが、私の場合はこのメソッドも常に "0"を返します。しかし、InputStreamにinput.available()のようにチェックすると、戻り値は配列の長さになります。

エラーは、私はそれが戻っていると同じように同じである「-1」 - だから、

java.io.EOFException 
at org.anarres.lzo.LzoInputStream.readBytes(LzoInputStream.java:183) 
at org.anarres.lzo.LzoInputStream.readBlock(LzoInputStream.java:132) 
at org.anarres.lzo.LzoInputStream.fill(LzoInputStream.java:119) 
at org.anarres.lzo.LzoInputStream.read(LzoInputStream.java:90) 

、LzoInputStreamを初期化中に私が間違っているか、その後、私は何かをする必要がありますか?任意の提案をいただければ幸いです!

+0

圧縮方法を教えてください。 –

答えて

0

圧縮中にlzoストリームがフラッシュされて閉じていることを確認してください。

+0

私はこのデータを圧縮していません。データはネットワークから送信されています。私は間違いなくそれが圧縮されている間、洗い流され、閉じられていると言うことができます。 – kit

関連する問題