首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZipOutputStream不写文件内容

ZipOutputStream不写文件内容
EN

Stack Overflow用户
提问于 2010-11-20 17:54:39
回答 1查看 3.4K关注 0票数 3

我需要压缩来自一个流的数据,并将压缩的数据放到另一个流中。下面是使用文件操作的代码(MyOutputStream是一个用于调试的简单的FileOutputStream包装器)。这个代码很好用。

代码语言:javascript
复制
        ZipOutputStream jos = new ZipOutputStream( new MyOutputStream(new FileOutputStream(zipFileName)));
        jos.setLevel(Deflater.DEFAULT_COMPRESSION);
        jos.putNextEntry(new ZipEntry("test.txt"));
        FileInputStream in = new FileInputStream("test.txt");

        int len;
        while ((len = in.read(buffer)) > 0){
             jos.write(buffer, 0, len);
        }
        jos.closeEntry();
        jos.close();

在我的实际应用程序中,我必须处理更复杂的流。事实上,流是用于CORBA互操作的。然而,数据被成功地读取。但是,当我尝试执行jos.write(buffer, 0, len);时,没有将数据写入底层ZipOutputStream的输出流。但是,zip文件头、条目、注释和中央目录都写得很成功,所以我得到了绝对有效的zip,只有一个例外,即文件是空的。

也许有人见过这种行为?任何帮助都是非常感谢的。

这里的编辑是我真正的代码,因为它可能很有用:

代码语言:javascript
复制
String fileName = fullSourcePath.substring(fullSourcePath.lastIndexOf('\\') + 1, fullSourcePath.length());
WrapperOutputStream out = new WrapperOutputStream(newexchangeStream64);
ZipOutputStream jos = new ZipOutputStream(out);
jos.setLevel(Deflater.NO_COMPRESSION);

jos.putNextEntry(new ZipEntry(fileName));
jos.setComment("Comment");
IDLDataHolder data = new IDLDataHolder();
LongHolder dataAmount = new LongHolder();
LongHolder written = new LongHolder();

while (true) {
    exchangeStream64.Read(data, READ_AMOUNT, dataAmount);
    if (0 == dataAmount.value) {
        break;
    }

    jos.write(data.value, (int)dataAmount.value, (int)written.value);
}
jos.closeEntry();
jos.close();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-20 18:26:49

代码语言:javascript
复制
LongHolder written = new LongHolder();

while (true) {
    exchangeStream64.Read(data, READ_AMOUNT, dataAmount);
    if (0 == dataAmount.value) {
        break;
    }

    jos.write(data.value, (int)dataAmount.value, (int)written.value);
}

这里可能只是复制粘贴错误,但是jos.write的最后一个参数总是0。这是从数组写入的字节数。

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

https://stackoverflow.com/questions/4234122

复制
相关文章

相似问题

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