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