2015-04-16 32 views
6

Các zlib docs xác định rằng người ta có thể vượt qua một windowBits luận tiêu cực đến deflateInit2() chức năng:Có thể lấy một số liệu thô ra khỏi java.util.zip.Deflater không?

windowBits cũng có thể là -8 ..- 15 cho nguyên deflate. Trong trường hợp này, -windowBits xác định kích thước cửa sổ. deflate() sau đó sẽ tạo ra dữ liệu deflate thô không có zlib tiêu đề hoặc đoạn giới thiệu và sẽ không tính giá trị kiểm tra adler32.

Tôi đã sử dụng điều này trong mã C của tôi, và trong Java là có thể thổi phồng byte do đó nén bằng cách đi qua true cho nowrap tham số để các nhà xây dựng Inflater.

Tuy nhiên, vượt qua true cho tham số nowrap tới Deflater không mang lại giảm phát thô. Nó trả về 20 byte nhiều hơn tôi nhận được với việc thực hiện C của tôi, mà chắc chắn âm thanh như một tiêu đề và kiểm tra. (Đi qua false cho nowrap mang lại một mảng byte thậm chí lâu hơn.)

Tôi đã quét qua Deflater docs nhưng chưa tìm ra cách để xác định bit cửa sổ hoặc mà tôi muốn có một deflate thô. Có thể với thư viện này không? Hoặc tôi sẽ cần phải sử dụng một số thực hiện khác để có được một deflate thô trong Java?

+0

AFAIK, chuyển giá trị đúng cho tham số không có bọc là cách duy nhất để sử dụng giảm phát thô. –

+0

Tôi * nghĩ rằng * chuyển 'true' thành tham số' nowrap' mang lại kết quả [RFC-1950] (https://www.ietf.org/rfc/rfc1950.txt) ZLIB. Việc truyền 'false' cho kết quả Gzip-1952] (https://www.ietf.org/rfc/rfc1952.txt) Gzip. Những gì tôi muốn là một [RFC-1951] (https://www.ietf.org/rfc/rfc1951.txt) kết quả DEFLATE thô. – theory

+0

bạn đã xem xét các khả năng 'DeflaterOutputStream' và' DeflaterInputStream' chưa? Có lẽ điều đó sẽ giúp bạn. –

Trả lời

2

Deflater sản xuất dữ liệu được gói zlib (RFC 1950). Deflater(level, true) tạo dữ liệu thô lệch (RFC 1951).

+0

Hrm. Tại sao nó sẽ dài hơn 20 byte so với đầu ra từ việc triển khai C, sau đó? – theory

+0

Cài đặt máy nén khác nhau? Mã máy nén khác nhau? Nếu bạn cung cấp 30 byte đầu tiên trong hex, tôi có thể xác minh xem có trình bao bọc hay không. –

+0

30 byte đầu tiên xì hơi trong C: '6D52CB729B3014FD95EE531349084974260BBD3018830101356C327E24A91'. Tôi thổi phồng chúng trong Java sau đó xì hơi chúng một lần nữa với 'Deflater (DEFAULT_COMPRESSION, true)' và có byte bắt đầu bằng 'ED524D739B3014EC4FC9BD3591849044677290903018830101355C32FE485'. – theory

Các vấn đề liên quan