我发现这篇关于用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);
}
现在发送到服务器的数据应该在发送之前进行压缩(但我不确定这是否是正确的解决方案)。是吗?
现在想象服务器向我发送压缩数据。
所以这个流:
final InputStream streamFromServer = server.getInputStream();
被压缩。
我怎样才能解压它并写入
final OutputStream streamToClient = client.getOutputStream();
谢谢你们的帮助,伙计们!
阅读这些流的 javadoc:http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPInputStream.html and http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html.
GZIPOutputStream 在将写入的字节发送到包装的输出流之前对其进行压缩。 GZIPInputStream 从包装流中读取压缩字节并返回未压缩字节。
因此,如果您想向任何人发送压缩字节,则必须写入 GZIPOutputStream。但当然,只有当接收端知道并解压缩它接收到的字节时,这才有效。
同样,如果要读取压缩字节,则需要从 GZIPInputSTream 读取它们。但当然,只有发送端确实使用相同的算法压缩字节时,它才会起作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)