压缩和解压流



我找到了一篇关于用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和http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html。

GZIPOutputStream压缩您写入的字节,然后将它们发送到包装的输出流。GZIPInputStream从包装流中读取压缩字节并返回未压缩字节。

所以,如果你想发送压缩字节给任何人,你必须写入GZIPOutputStream。但是,当然,这只会在接收端知道它并解压缩它接收到的字节时才会起作用。

类似地,如果您想要读取压缩字节,则需要从GZIPInputSTream读取它们。但是,当然,只有当字节确实被发送端使用相同的算法压缩时,它才会工作。

相关内容

  • 没有找到相关文章

最新更新