Deflater.setLevel() không hoạt động như mong đợi đối với tôi.Công cụ Deflater.setLevel() có hoạt động không?
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));
}
Các công trình trên ok cho tôi (Java 7), nhưng khi tôi bỏ ghi chú dòng compresser.setLevel()
, nó phá vỡ (deflate()
trả về 0 byte). Điều tương tự cũng xảy ra với mọi cấp độ nén, ngoại trừ DEFAULT
. Cụ thể hơn, nó chỉ "hoạt động" (thay vào đó, nó vô hại) khi thiết lập mức là như nhau đã được thiết lập (explictly hoặc ngầm), như ở đây) trong constructor - đó là để nói, nó chỉ có thể được sử dụng khi nó vô dụng.
Xem ví dụ tại Ideone.
This question điểm cho cùng một vấn đề và câu trả lời được chấp nhận về cơ bản cho biết: không đặt mức với setter, làm điều đó trong hàm tạo. Xa vời, IMO - tại sao setLevel()
lại tồn tại? Là nó bị hỏng hoặc là chúng ta thiếu một cái gì đó?
Nó có vẻ là một lỗi trong API 'Deflater' ... Đọc javadoc, không rõ ràng về những gì' .finish() 'thực sự làm. Cách giải quyết được đề xuất trong công việc trả lời cuối cùng? – fge