首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套接字使用的GZIPOutputStream长度

套接字使用的GZIPOutputStream长度
EN

Stack Overflow用户
提问于 2013-12-25 01:56:00
回答 1查看 767关注 0票数 2

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

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

代码语言:javascript
复制
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的大小。

这就是我想做的。

代码语言:javascript
复制
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();

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

更新

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

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2015-04-11 20:45:38

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

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20764957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档