Cần source code java phần mềm nén và giải nén file? | Vatgia Hỏi & Đáp

lovelife
lovelife

Trả lời 12 năm trước

Cách đây 6 tháng, tôi có làm 1 đề tài về nén ảnh (gồm cả nén dữ liệu bằng Java) có gỏi code lên Planet-source-code.com. Bạn vào đây xem thửu có dùng được gì không.

[url=http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4640&lngWId=2]http://www.planet-source-code.com/vb…=4640&lngWId=2[/url]

Hope this helps

Ngoài ra đây là Thuật toán nén dữ liệu hy vọng giúp được bạn chút ít

Nén dữ liệu cũng là một bài toán phức tạp và người ta cũng đang còn nghiên cứu. Mục đích của nén dữ liệu là làm thu gọn dữ liệu nhằm mục đích truyền thông cũng như lưu trữ nhưng vẫn đảm bảo được tính toàn vẹn dữ liệu. Nén dữ liệu là một biểu hiện sinh động của lí thuyết thông tin, nó liên quan đến vấn đề xử lí tín hiệu và lưu trữ thông tin. Nén dữ liệu chính là phương pháp mã hóa dữ liệu sao cho luồng thông tin đầu ra
có dung lượng nhỏ hơn luông thông tin đầu vào nhưng lượng thông tin không đổi hay thay đổi trong một giới hạn chấp nhận đc. Có hai phương pháp nén dữ liệu chính là:
1. Phương pháp nén không tổn hao: là pp mà lượng thông tin ko đổi. Đối với phương pháp này có 2 mô hình nén dữ liệu sau:
a, Mô hình thống kê: là mô hình nén dựa vào đặc điểm thông kê của nguồn tin cần nén: có 2 loại mô hình thống kê là thống kê tĩnh và thống kê động.

Điển hình của mô hình này là các thuật toán Shanon-Phano và Huffman
b, Mô hình từ điển.
Mô hình từ điển khác với mô hình thống kê ở chỗ mô hình thống kê chỉ xét tới đặc điểm phân bố của của từng đơn vị dữ liệu còn mô hình từ điển thì dựa trên sự lặp lại của một đoạn dữ liệu trong nguồn tin, chính vì vậy hiệu quả nén của mô hình này rất cao. Cũng gồm 2 kiểu mô hình là mô hình từ điển tĩnh (điển hình là thuật toán LZ77) và mô hình từ điển động (điển hình là thuật toán LZW).

Ngoài ra còn một thuật toán nén rất hiệu quả là thuật toán RLE: hoạt động bằng cách xem xét sự lặp lại cảu các kí tự hoặc cụm kí tự đứng liền kề nhau trong nguồn tin vào.

2. Phương pháp nén tổn hao.

Nén tổn hao là pp hiện đại có nhiều ứng dụng trong thực tiễn sản xuất kinh doanh.Ý tưởng cơ bản là chịu mất một phần thông tin có thể chấp nhận đc để tăng hiệu quả mã hóa. ứng dụng trong nén hình ảnh, tín hiệu thoại, video.

Mình cũng chỉ hiểu qua sơ lược như thế, mình không thiên về đi sâu vào lĩnh vực này. Do đó để có những kiến thức sâu hơn, các bạn cứ vào google search, và chịu khó đọc là được.

Về WinRaz thì mình cũng không rõ lắm là nó dùng thuật toán nào hình như là dùng Lempel và RLE gì đó. ^^^

>> Sau nghiên cứu lý thuyết về nén dữ liệu bạn sẽ thấy không có thuật toán nào là hoàn hảo đâu. Với mỗi loại dữ liệu thì 1 thuật toán sẽ tối ưu hoặc không:

Chăng hạn bạn cần nén dữ liệu có 50 bit ‘1’ và 50 bit ‘0’ khi đó RLE là hiệu quả vì cần lưu số 50-50 là xong. Nhưng nếu dùng Huffman và LZW sẽ không hiệu quả vì phải lưu cây mã hóa kèm theo (Huffman) hoặc từ điển (LZW). Ngược lại nếu mã hóa 100 dữ liệu toìan các bít ‘0’ và ‘1’ ngẫu nhiên thì chưa chắc RLE hiệu quả vì có khi còn làm cho file nén ‘phình’ to hơn.

Vì vậy tôi có 1 gợi ý là bạn nên theo cách của Winzip, rar. Hình như (tôi không chắc lắm vì có lần đọc lướt trên mạng) các chương trình đó có 2 giai đoạn: tiền xử lý tức là đánh giá hiệu quả các giải thuật rồi quyết định chọn giải thuât tối ưu, sau đó mới đến giai đoạn nén thực sự.

Tôi không tự viết code cho các thuật toán nén= c/c++ nhưng thực sự nó không khác Java lắm đâu. Hãy vô Google và search = khóa compression algorithms bạn sẽ có vô số tài liệu và cả code tham khảo (đọc cả 3 đời chưa hết

Chúc bạn thành công

Hi vọng sẽ được chia sẻ nhiều kiến thức với các bạn.