使用GZIPOutputStream将文件发布到servlet时文件损坏

使用GZIPOutputStream将文件发布到servlet时文件损坏,第1张

使用GZIPOutputStream将文件发布到servlet时文件损坏

你需要打电话

((GZIPOutputStream)output2).finish();

冲洗前。在此处查看javadoc。它指出

完成压缩数据写入输出流的 *** 作,而无需关闭基础流。将多个过滤器连续应用于同一输出流时,请使用此方法。

你在做什么 所以

for (int length = 0; (length = input.read(buffer)) > 0;)     output2.write(buffer, 0, length);}((GZIPOutputStream)output2).finish(); //Write the compressed parts// obviously make sure output2 is truly GZIPOutputStreamoutput2.flush(); //

关于 将多个过滤器连续应用于同一输出流的主题 ,这就是我的理解方式:

您有一个

OutputStream
到HTTP服务器的,即套接字连接。该
HttpUrlConnection
写头,然后你直接写体。在这种情况下(多部分),您将边界和标头发送为未压缩的字节,已压缩的文件内容,然后再次发送边界。因此,流最终看起来像这样:

      start writing with GZIPOutputStream         v    |---boundary---|---the part headers---|---gzip enpred file content bytes---|---boundary---|    ^         ^write directly with PrintWriter     use PrintWriter again

因此,您可以看到如何用不同的过滤器依次编写不同的部分。请将

PrintWriter
视为未过滤的过滤器,您提供的任何内容都将直接编写。的
GZIPOutputStream
是一个gzip滤波器,其编码(的gzip)字节它给。

至于源代码,看在你的Java
JDK的安装,你应该有一个

src.zip
包含公开的源代码文件,
java.lang*
java.util.*
java.io.*
javax.*
,等。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5475934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存