Java ZipOutputStream不';无法写入文件内容

Java ZipOutputStream不';无法写入文件内容,java,zip,stream,Java,Zip,Stream,我需要压缩来自一个流的数据,并将压缩后的数据放到另一个流中。下面是与文件一起操作的代码(MyOutputStream是一个用于调试目的的简单FileOutputStream包装器)。这段代码运行良好 ZipOutputStream jos = new ZipOutputStream( new MyOutputStream(new FileOutputStream(zipFileName))); jos.setLevel(Deflater.DEFAULT_COMPR

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

        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)时没有数据写入作为ZipoutStream基础的输出流。但是,zip文件头、条目注释和中心目录都被成功写入,所以我得到了绝对有效的zip,只有一个例外,即文件是空的

也许有人以前见过这种行为?感谢您的帮助

编辑 以下是我的真实代码,因为它可能很有用:

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();

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

您能从应用程序中发布该特定部分吗?或者它太大了?我不知道IDLDataHolder-它是一个大于零的缓冲区吗?谢谢!这真是一个愚蠢的复制粘贴错误。在调试所有这些流时,我的头都碎了:)
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);
}