您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

使用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 GZIPOutputStream
output2.flush(); //

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

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

                            start writing with GZIPOutputStream
                                          v
    |---boundary---|---the part headers---|---gzip encoded 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.*,等。

Jave 2022/1/1 18:28:22 有294人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶