2011-11-18 4 views
8

ストリームサーバーに送信し、クライアントに応答を送信します。私がしたいのは、ストリームが送信され、受信された後で圧縮解除される前に、このストリームを圧縮することです。は圧縮と解凍、私はJavaで実装されたシンプルなプロキシサーバについては、この記事を見つけた

私はクラスGZIPInputStreamを見つけましたが、私はそれを使用すると、私はインターネット上で見つかったことは、私を助けていないかどうかはわかりません。私はあまりそれを理解していなかったか、それとも私にとって良い解決策ではなかったのか。

は、私の考えは、あまりにもそれであるが、私はそのOKかはわからない:

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

おかげで、みんなに書き込むことができますどのように

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

+0

クロスポスト:[java-forums.org - 圧縮解除ストリーム](http://www.java-forums.org/new-java/51442-compress-decompress-streams.html) –

答えて

9

は、これらのストリームのJavadocを読んでください。

GZIPOutputStreamは包まれた出力ストリームに送信する前に、あなたがそれに書き込むバイトを圧縮します。 GZIPInputStreamは、ラップされたストリームから圧縮されたバイトを読み取り、圧縮されていないバイトを返します。

あなたは誰に圧縮されたバイトを送信したいのであれば、あなたはGZIPOutputStreamに書き込む必要があります。しかし、もちろん、これは受信側がそれを知っていて受信したバイトを解凍する場合にのみ有効です。

あなたが圧縮されたバイトを読みたい場合は同様に、あなたはGZIPInputSTreamからそれらを読む必要があります。もちろん、送信側で同じアルゴリズムを使用してバイトが実際に圧縮されている場合にのみ動作します。

+0

ありがとうあなた、非常に便利です! –

関連する問題