Сжатие и распаковка потоков

Я нашел эту статью о простом прокси-сервере, реализованном на JAVA:

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

код просто получает некоторый поток от клиента, после отправки его на сервер и после того, как он получает поток от сервера и отправляет ответ клиенту. То, что я хотел бы сделать, это сжать эти потоки до его отправки и распаковать после его получения.

Я нашел класс!--3--> но я не уверен, как его использовать, и то, что я нашел в Интернете, не помогло мне. Я либо не понимал этого, либо это не было хорошим решением для меня.

моя идея тоже, но я не уверен, что это нормально:

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

is сжатый.

как я могу распаковать его и пишите на

final OutputStream streamToClient = client.getOutputStream();

Спасибо за помощь, ребята!

1 ответов


прочитайте javadoc этих потоков: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. Но, конечно, это будет работать только в том случае, если байты действительно сжаты с использованием того же алгоритма отправкой.