gpt4 book ai didi

java - 压缩和解压缩流

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:42 24 4
gpt4 key购买 nike

我找到了这篇关于用 JAVA 实现的简单代理服务器的文章:

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

代码只是从客户端获取一些流,然后将其发送到服务器,然后从服务器获取流并将响应发送到客户端。我想做的是在发送之前压缩此流,并在收到后解压缩。

我找到了 GZIPInputStream 类,但我不确定如何使用它,而且我在 Internet 上找到的内容对我没有帮助。我不是太了解它,就是这对我来说不是一个好的解决方案。

我的想法也是这样,但我不确定它是否可以:

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.htmlhttp://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html .

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

因此,如果您想向任何人发送压缩字节,您必须写入 GZIPOutputStream。但是当然,这只有在接收端知道并解压缩它接收到的字节时才有效。

同样,如果要读取压缩字节,则需要从 GZIPInputSTream 中读取它们。但当然,只有当发送端确实使用相同的算法压缩字节时,它才会起作用。

关于java - 压缩和解压缩流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com