Java zip.close()挂起

时间:2017-04-19 18:13:35

标签: java scala zip inputstream

我正在尝试将两个小文件添加到zip中,因为这是目标所需的格式。这两个文件都小于1000kb但是当我运行我的代码时,程序在zip.close()期间无限期挂起,没有错误。 我做错了什么?

val is = new PipedInputStream()
val os = new PipedOutputStream(is)
val cos = new CountingOutputStream(os)
val zip = new ZipOutputStream(cos)

val fis = new FileInputStream(file)
zip.putNextEntry(new ZipEntry(location))
var i = 0
while(i != -1) {
  zip.write(i)
  i = fis.read()
}
zip.closeEntry()
fis.close()
zip.close()

1 个答案:

答案 0 :(得分:4)

使用管道流时,您需要在写入PipedInputStream的同时从PipedOutputStream读取,否则管道会填满,写入将会阻止。

根据你的代码,你没有做阅读部分(当然是在一个单独的线程中)。您可以使用FileOutputStream对其进行测试,它应该很好地编写文件。