Deflater.setLevel()が期待どおりに機能しません。
static void test1() throws Exception {
byte[] output = new byte[20];
Deflater compresser = new Deflater();
// compresser.setLevel(Deflater.BEST_COMPRESSION);
compresser.setInput("blah".getBytes("UTF-8"));
compresser.finish();
int len = compresser.deflate(output);
System.out.println("len="+ len+ " " +Arrays.toString(output));
}
上記は私にとっては問題なく機能します(Java 7)が、compresser.setLevel()
行のコメントを外すと壊れます(deflate()
0バイトを返します)。を除いて、どの圧縮レベルでも同じことが起こりますDEFAULT
。より具体的には、レベルセットがコンストラクターで設定されたもの (明示的または暗黙的に、ここのように) と同じである場合にのみ「機能」します (むしろ、無害です)。つまり、それは役に立たない場合にのみ使用できます。
Ideoneで例を参照してください。
この質問は同じ問題を指しており、受け入れられた答えは基本的に次のように述べています。セッターでレベルを設定しないで、コンストラクターで設定してください。満足にはほど遠い、IMO - なぜsetLevel()
存在するのですか? 壊れていますか、それとも何か不足していますか?