2012-07-25 24 views
5

Tôi có rất nhiều dữ liệu (định dạng văn bản) để gửi từ thiết bị. Nó rõ ràng có nghĩa là tôi nên nén nó. Nhưng câu hỏi của tôi là liệu có bất kỳ cách nào để thực hiện nó ngoài thuật toán zip (like this) hay không. Lý do tôi hỏi câu hỏi này là trên here - đối với tệp văn bản tức là 7-zip gấp hai lần (!) Tốt hơn zip. Đó là một lợi ích đáng kể. Và có lẽ có những thuật toán tốt hơn.Nén dữ liệu trên Android (ngoài java.util.zip?)

Vậy có cách nào để nén dữ liệu hiệu quả (tốt hơn zip) có sẵn cho Android không?

+1

Hai lần là tốt ... đó chắc chắn là một vấn đề. Các thuật toán nén khác nhau tốt hơn các thuật toán khác, đặc biệt là với một số loại nén dữ liệu nhất định, nhưng đây không phải là sự cân nhắc duy nhất. Tiêu chuẩn hóa, bằng sáng chế và tốc độ là rất quan trọng. –

+0

Tìm kiếm nhanh dường như chỉ ra rằng các lựa chọn dễ dàng của bạn là Zip và Gzip. –

+0

zip và gzip sử dụng cùng một thuật toán nén, chỉ các tiêu đề và đoạn giới thiệu khác với zip. Vì vậy, bạn có thể lưu một vài byte trên tiêu đề và đoạn giới thiệu bằng cách sử dụng định dạng gzip và thêm một vài byte nếu bạn sử dụng định dạng zlib. Nhưng không có gì đáng kể như bạn sẽ nhận được với các thuật toán nén nâng cao hơn đòi hỏi nhiều thời gian hơn và nhiều bộ nhớ hơn. –

Trả lời

6

Bạn cần biên dịch một thư viện khác vào mã của mình, vì tôi nghi ngờ rằng các thuật toán nén khác hơn zlib có sẵn như là một phần của thư viện chuẩn trên Android.

Thuật toán 7-zip mà bạn tham chiếu thực sự được gọi là LZMA, mà bạn có thể nhận được ở dạng thư viện trong số LZMA SDK. Mã nguồn có sẵn trong Java cũng như C. Nếu bạn có thể liên kết mã C vào ứng dụng của bạn, điều đó sẽ thích hợp hơn cho tốc độ.

Vì không có những thứ như bữa trưa miễn phí, tốc độ là quan trọng. LZMA sẽ yêu cầu nhiều bộ nhớ hơn và thời gian thực hiện nhiều hơn để đạt được độ nén được cải thiện. Bạn nên thử nghiệm với LZMA và zlib trên dữ liệu của bạn để xem nơi bạn muốn sự cân bằng giảm giữa thời gian thực hiện và nén, cả hai để chọn một gói và chọn mức nén trong một gói.

Nếu bạn thấy rằng bạn muốn đi theo cách khác, để nén ít hơn và thậm chí tốc độ cao hơn zlib, bạn có thể xem lz4.

-1

Câu hỏi của bạn quá chung chung.

Bạn có thể sử dụng bất kỳ thư viện nào, miễn là nó nằm trong Java hoặc C/C++ (thông qua NDK). Nếu bạn không muốn sử dụng thư viện bên ngoài, bạn phải tuân theo những gì trong SDK. Tùy thuộc vào cách bạn đang gửi dữ liệu, có thể có các cách tiêu chuẩn để thực hiện việc này. Ví dụ: HTTP sử dụng gzip và có các tiêu đề cần thiết đã được xác định.

Nói ngắn gọn, hãy thử nghiệm những thứ khác nhau với định dạng và kích thước dữ liệu dự kiến ​​của bạn, tìm ra thứ tốt nhất và tích hợp nó trong ứng dụng của bạn.

+0

dữ liệu đang được gửi qua giao thức tùy chỉnh, vì vậy tôi sẽ không sử dụng HTTP. Xin vui lòng cho tôi một gợi ý về một lib nén java tốt? Tôi chưa bao giờ thực sự sử dụng. – alex

+0

Của tôi hoặc :) Các JDK đã được đủ cho tôi. Thay vì chỉ chọn ngẫu nhiên, hãy tìm một số và kiểm tra chúng dựa vào dữ liệu của bạn. –

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