2011-11-18 47 views
8

tôi tìm thấy bài viết này về máy chủ proxy đơn giản thực hiện trong JAVA:nén và giải nén suối

http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm

Mã này chỉ đơn giản được một số dòng từ khách hàng, sau khi gửi nó đến máy chủ và sau khi nó được dòng từ máy chủ và gửi phản hồi cho máy khách. Những gì tôi muốn làm là để nén các dòng này trước khi nó được gửi và giải nén sau khi nó được nhận.

Tôi đã tìm thấy lớp học GZIPInputStream nhưng tôi không chắc chắn cách sử dụng nó và những gì tôi tìm thấy trên internet đã không giúp tôi. Tôi hoặc không hiểu điều đó quá nhiều hoặc đó không phải là một giải pháp tốt cho tôi.

Ý tưởng của tôi là quá đó nhưng tôi không chắc chắn nếu ok của nó:

final InputStream streamFromClient = client.getInputStream(); 
final OutputStream streamToClient = client.getOutputStream(); 
final InputStream streamFromServer = server.getInputStream(); 
final OutputStream streamToServer = server.getOutputStream(); 

InputStream gzipStream = new GZIPInputStream(streamFromClient); 
try 
{ 
     while ((bytesRead = gzipStream.read(request)) != -1) 
     { 
        streamToServer.write(request, 0, bytesRead); 
        streamToServer.flush(); 
     } 
} 
catch (Exception e) { 
System.out.println(e); 
} 

Bây giờ dữ liệu được gửi đến máy chủ nên được nén trước khi gửi (nhưng tôi không chắc chắn nếu đó là một giải pháp đúng). LÀ NÓ?

Bây giờ hãy tưởng tượng máy chủ gửi cho tôi dữ liệu đã nén. Vì vậy, luồng này:

final InputStream streamFromServer = server.getInputStream(); 

được nén.

Làm thế nào tôi có thể giải nén nó và viết thư cho

final OutputStream streamToClient = client.getOutputStream(); 

Thanks for the help, guys!

+0

đăng chéo: [java-forums.org - nén-giải nén luồng] (http://www.java-forums.org/new-java/51442-compress-decompress-streams.html) –

Trả lời

9

Đọc javadoc của các luồng này: http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPInputStream.htmlhttp://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html.

GZIPOutputStream nén các byte bạn viết vào trước khi gửi chúng tới luồng đầu ra được bao bọc. GZIPInputStream đọc các byte đã nén từ luồng được bao bọc và trả về các byte không nén.

Vì vậy, nếu bạn muốn gửi byte đã nén cho bất kỳ ai, bạn phải ghi vào GZIPOutputStream. Nhưng tất nhiên, điều này sẽ chỉ hoạt động nếu đầu nhận biết nó và giải nén các byte nó nhận được.

Tương tự, nếu bạn muốn đọc các byte đã nén, bạn cần đọc chúng từ GZIPInputSTream. Nhưng tất nhiên, nó sẽ chỉ hoạt động nếu các byte thực sự được nén bằng cách sử dụng cùng một thuật toán bằng cách gửi kết thúc.

+0

Cảm ơn bạn, rất hữu ích! –

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