你需要打电话
((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.*,等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)