gpt4 book ai didi

java - 套接字使用的 GZIPOutputStream 长度

转载 作者:可可西里 更新时间:2023-11-01 16:43:14 26 4
gpt4 key购买 nike

我正在用 Java 开发一个带有套接字的小型网络服务器。我让它像 HTTP 一样工作,使用 Connection: keep-alive 等等。现在,我想压缩 (GZIP) 发送的数据。

为了确保遵守 Connection: keep-alive,我从不关闭套接字。这就是为什么我需要在每个响应中发送 content-length。使用普通文件很容易做到。我就是这样做的。

out.println(HTTP_VERSION + " 200 OK");
out.println("Content-Type: "+Files.probeContentType(f.toPath())+"; charset=UTF-8\nContent-Length:"+f.length()+"\n");
Files.copy(f.toPath(), so.getOutputStream());

但我不知道如何检索我的 GZIPOutputStream 的大小。

这就是我想做的。

GZIPOutputStream gos = new GZIPOutputStream(so.getOutputStream());
out.println(HTTP_VERSION + " 200 OK");
out.println("Content-Type: "+Files.probeContentType(f.toPath())+"; charset=UTF-8\nContent-Encoding: gzip\nContent-Length:"+SIZE HERE+"\n");
Files.copy(f.toPath(), gos);
gos.finish();

有什么想法吗?谢谢。圣诞快乐!

更新

我设法解决了我的问题。这是最终代码:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gos = new GZIPOutputStream(bos);
Files.copy(f.toPath(), gos);
gos.finish();
out.println("Content-Type: "+Files.probeContentType(f.toPath())+"; charset=UTF-8\nContent-Encoding: gzip\nContent-Length:"+bos.toByteArray().length+"\n");
bos.writeTo(so.getOutputStream());

感谢 JB Nizet 和 Brant Unger

最佳答案

我设法解决了我的问题。这是最终代码:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gos = new GZIPOutputStream(bos);
Files.copy(f.toPath(), gos);
gos.finish();
out.println("Content-Type: "+Files.probeContentType(f.toPath())+"; charset=UTF-8\nContent-Encoding: gzip\nContent-Length:"+bos.toByteArray().length+"\n");
bos.writeTo(so.getOutputStream());

感谢 JB Nizet 和 Brant Unger

关于java - 套接字使用的 GZIPOutputStream 长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764957/

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