Mil*_*tný 8 java compression gzip stream
我发现这篇关于在JAVA中实现的简单代理服务器的文章:
http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm
代码只是从客户端获取一些流,然后将其发送到服务器,然后从服务器获取流并将响应发送到客户端.我想要做的是在发送之前压缩这些流,并在收到之后对其进行解压缩.
我找到了班级,GZIPInputStream但我不确定如何使用它,我在互联网上找到的并没有帮助我.我要么不明白这么多,要么对我来说不是一个好的解决方案.
我的想法也是如此,但我不确定它是否正常:
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);
}
Run Code Online (Sandbox Code Playgroud)
现在发送到服务器的数据应该在发送之前进行压缩(但我不确定它是否是正确的解决方案).是吗?
现在假设服务器向我发送压缩数据.所以这个流:
final InputStream streamFromServer = server.getInputStream();
Run Code Online (Sandbox Code Playgroud)
被压缩了.
我怎样才能解压缩并写入
final OutputStream streamToClient = client.getOutputStream();
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助,伙计们!
阅读这些流的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中读取它们.但是,当然,只有当发送端使用相同的算法确实压缩字节时,它才会起作用.