2011-11-18 14 views
8

me encontré con este artículo sobre sencilla servidor proxy implementado en Java:compresión y descompresión de arroyos

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

El código simplemente consigue un cierto flujo desde el cliente, después lo envía al servidor y después de dicha corriente de el servidor y envía la respuesta al cliente. Lo que me gustaría hacer es comprimir estos flujos antes de enviarlos y descomprimirlos después de recibirlos.

Encontré la clase GZIPInputStream pero no estoy seguro de cómo usarla y lo que encontré en Internet no me ayudó. O no entendí tanto o no fue una buena solución para mí.

Mi idea es también que pero no estoy seguro de si es aceptable:

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

Ahora los datos enviados al servidor debe ser comprimido antes de enviar (pero no estoy seguro de si es una solución correcta) ¿LO ES?

Ahora imagine que el servidor me envía los datos comprimidos. Así esta corriente:

final InputStream streamFromServer = server.getInputStream(); 

se comprime.

Como puedo descomprimirlo y escribir a los

final OutputStream streamToClient = client.getOutputStream(); 

Gracias por la ayuda, chicos!

+0

publicación cruzada: [java-forums.org - compress-decompress-streams] (http://www.java-forums.org/new-java/51442-compress-decompress-streams.html) –

Respuesta

9

Lea el javadoc de estas corrientes: http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPInputStream.html y http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html.

GZIPOutputStream comprime los bytes que escribe en él antes de enviarlos a la secuencia de salida envuelta. GZIPInputStream lee los bytes comprimidos de la secuencia envuelta y devuelve bytes sin comprimir.

Por lo tanto, si desea enviar bytes comprimidos a cualquier persona, debe escribir en un GZIPOutputStream. Pero, por supuesto, esto solo funcionará si el receptor lo conoce y descomprime los bytes que recibe.

De forma similar, si desea leer bytes comprimidos, debe leerlos desde un GZIPInputSTream. Pero, por supuesto, solo funcionará si los bytes están efectivamente comprimidos usando el mismo algoritmo por el extremo emisor.

+0

Gracias usted, muy útil! –

Cuestiones relacionadas