2011-11-18 14 views
8

मैं साधारण प्रॉक्सी सर्वर जावा में लागू के बारे में इस लेख पाया:कंप्रेस decompressing धाराओं

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

कोड बस ग्राहक से कुछ धारा हो जाता है, के बाद सर्वर को भेज देता है और इसे से धारा हो जाता है के बाद सर्वर और ग्राहक को प्रतिक्रिया भेजता है। मैं यह करना चाहता हूं कि इसे भेजने से पहले इस धाराओं को संपीड़ित करें और प्राप्त होने के बाद डिकंप्रेस करें।

मुझे कक्षा GZIPInputStream मिली है, लेकिन मुझे यकीन नहीं है कि इसका उपयोग कैसे किया जाए और इंटरनेट पर जो मैंने पाया वह मेरी मदद नहीं करता था। मैं या तो इतना समझ में नहीं आया था या यह मेरे लिए एक अच्छा समाधान नहीं था।

मेरा विचार भी है कि लेकिन मुझे यकीन है कि अगर ठीक नहीं कर रहा हूँ:

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); 
} 

अब डेटा सर्वर के लिए भेजा भेजने से पहले संकुचित किया जाना चाहिए (लेकिन मुझे यकीन है कि अगर यह एक सही समाधान है नहीं कर रहा हूँ)। क्या यह?

अब कल्पना करें कि सर्वर मुझे संपीड़ित डेटा भेजता है। तो यह स्ट्रीम:

final InputStream streamFromServer = server.getInputStream(); 

संपीड़ित है।

मैं इसे कैसे संपीड़न हटाने और करने के लिए मदद के लिए

final OutputStream streamToClient = client.getOutputStream(); 

धन्यवाद लिखते हैं, लोग कर सकते हैं!

+0

क्रॉस-पोस्ट: [जावा-forums.org - संपीड़न-डिकंप्रेस-स्ट्रीम] (http://www.java-forums.org/new-java/51442-compress-decompress-streams.html) –

उत्तर

9

इन धाराओं के जावाडोक पढ़ें: http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPInputStream.html और http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html

GZIPOutputStream उन्हें बाइट्स को संकुचित आउटपुट स्ट्रीम में भेजने से पहले लिखते हैं। GZIPInputStream लपेटा हुआ स्ट्रीम से संपीड़ित बाइट्स पढ़ता है और असम्पीडित बाइट्स देता है।

तो, यदि आप किसी को संपीड़ित बाइट भेजना चाहते हैं, तो आपको एक GZIPOutputStream को लिखना होगा। लेकिन निश्चित रूप से, यह केवल तभी काम करेगा जब प्राप्त करने वाला अंत इसे जानता है और इसे प्राप्त बाइट्स को डिकंप्रेस करता है।

इसी प्रकार, यदि आप संपीड़ित बाइट्स को पढ़ना चाहते हैं, तो आपको उन्हें GZIPInputSTream से पढ़ने की आवश्यकता है। लेकिन निश्चित रूप से, यह केवल तभी काम करेगा जब बाइट्स वास्तव में भेजने वाले अंत तक उसी एल्गोरिदम का उपयोग करके संपीड़ित हो जाते हैं।

+0

धन्यवाद आप, बहुत मददगार! –

संबंधित मुद्दे