La compression et la décompression des flux
J'ai trouvé cet article sur simple serveur proxy mis en œuvre en JAVA:
http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm
Le code obtient tout simplement un ruisseau de la part du client, après l'envoie au serveur et après ça devient courant à partir du serveur et envoie la réponse au client. Ce que je voudrais faire est de compresser ce flux avant de les envoyer et de décompresser après qu'il est reçu.
J'ai trouvé la classe GZIPInputStream
mais je ne suis pas sûr de savoir comment l'utiliser et ce que j'ai trouvé sur internet ne m'aide pas. Soit je ne comprends pas que tant de choses ou il n'a pas été une bonne solution pour moi.
Mon idée, c'est trop ça, mais je ne suis pas sûr si c'est 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);
}
Maintenant les données envoyées au serveur doit être compressé avant d'envoyer (mais je ne suis pas sûr si c'est une bonne solution). S'AGIT-IL?
Maintenant, imaginez que le serveur m'envoie les données compressées.
Si ce flux:
final InputStream streamFromServer = server.getInputStream();
est comprimé.
Comment décompresser et d'écrire à la
final OutputStream streamToClient = client.getOutputStream();
Merci pour l'aide, les gars!
OriginalL'auteur Milan Novotný | 2011-11-18
Vous devez vous connecter pour publier un commentaire.
Lire la javadoc de ces cours d'eau : http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPInputStream.html et http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html.
GZIPOutputStream compresse les octets que vous écrivez avant de les envoyer à la enveloppé flux de sortie. GZIPInputStream lit les octets compressés à partir du flux encapsulé et renvoie non compressé octets.
Donc, si vous voulez envoyer des octets compressés à quelqu'un, vous devez écrire à un GZIPOutputStream. Mais bien sûr, cela ne fonctionnera que si le destinataire sait et décompresse les octets qu'il reçoit.
De même, si vous voulez lire des octets compressés, vous avez besoin de les lire à partir d'un GZIPInputSTream. Mais bien sûr, ça ne marchera que si les octets sont en effet compressés en utilisant le même algorithme d'ici la fin de l'envoi.
OriginalL'auteur JB Nizet