2017-04-10 2 views
0

私はDeflaterを使ってネット上でいくつかのメッセージを送信しています。デフレーターエントロピーの問題

私が使用しています:

public static byte[] compress(byte[] data,int level) throws IOException { 

    Instant starts = Instant.now(); 

    Deflater deflater = new Deflater(); 
    deflater.setInput(data); 
    deflater.setLevel(/*level*/9); 

    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length); 
    deflater.finish(); 

    byte[] buffer = new byte[1024]; 
    while (!deflater.finished()) { 
      int count = deflater.deflate(buffer); // returns the generated code... index 
      outputStream.write(buffer, 0, count); 
    } 
    outputStream.close(); 
    byte[] output = outputStream.toByteArray(); 
    System.out.println("Original: " + data.length/1024 + " Kb"); 
    System.out.println("Compressed: " + output.length/1024 + " Kb"); 

    Instant ends = Instant.now(); 
    System.out.println("deflating time:"+Duration.between(starts, ends)); 

    return output; 
} 

は、一般的なバイト配列を圧縮し、

とを:

msg.setDataString(Base64.getEncoder().encodeToString(data)); 

は、XML内のオブジェクトを埋め込みます。

msg.dataString 

eNrt3e1i4jYQBdCR3/+hu+XTYM1I2IEku+fUbbdRDARMf1wmVxEAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
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 
(これは、RGBピクセルとほぼ空の画像(3Byte目)アレイのセットです):

すべては、私が見たデバッガを使用して、作業中の罰金が、今日をしました

エントロピーが本当に怖いのは明らかですが、この結果を得るには本当に間違ったことをしています。または "A"のシーケンスが有効な情報であることを無駄にしています。しかし、それは恐ろしいことです。

答えて

1

デフレートフォーマットの圧縮能力がデータの最初の部分で飽和していたことがあります。収縮時に可能な最大圧縮比は1032:1です。

圧縮されたデータでは、最初の1,083,300バイトはすべてゼロです。ほぼすべてが約1,000バイトに圧縮されています。

すべてが順調です。あなたは間違って何もしていません。心配ない。

+0

おかげで、基本的に9,000以上のXD ... 5秒間x秒のパケットを送信し、45k /秒の最適化が必要です。無駄なシーケンスを見つけてカットする方法を教えてください。たぶん私は別の圧縮戦略allthogeterを選択する必要がありますか? – Yggdrasil

+0

これらの空の画像をたくさん送信すると予想される場合、単純にもう一度圧縮することができます。 2,416バイトは、2回目の圧縮で1,403バイトまで圧縮されます。 –

+0

それは1032要素で数バイトに圧縮されませんか?レベル9を収縮させ、第2レベル1を収縮させるようアドバイスしますか? – Yggdrasil

関連する問題