java 关于CheckedOutputStream 流的操作

FileOutputStreamfileOutputStream=newFileOutputStream(zipFile);CheckedOutputStreamcos=... FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
String basedir = "";
compress(file, out, basedir);
out.flush();

上面是代码 compress就是一个自己写的方法。这里我要问的是
我在关闭流的时候,如果把fileOutputStream.close()执行了或者cos.close执行了再去关闭out.close 就会报错。Exception in thread "main" java.io.IOException: Write error
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)
at java.util.zip.CheckedOutputStream.write(CheckedOutputStream.java:56)
at org.apache.tools.zip.ZipOutputStream.writeOut(ZipOutputStream.java:828)
at org.apache.tools.zip.ZipOutputStream.deflate(ZipOutputStream.java:547)
at org.apache.tools.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:325)
at org.apache.tools.zip.ZipOutputStream.finish(ZipOutputStream.java:298)
at org.apache.tools.zip.ZipOutputStream.close(ZipOutputStream.java:488)
at com.liym.zip.ZipCompressor.compress(ZipCompressor.java:39)
at com.liym.zip.ZipCompressor.main(ZipCompressor.java:92)
我为什么不能关闭fileOutputStream、cos这两个流呢?
展开
 我来答
jamxval
2014-09-18 · TA获得超过6824个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1563万
展开全部
都是套管子的,按它们包装的顺序反过来 close,这种设计是 Filtered,就是一层套一套,比如 ZipOutputStream 它只负责 zip 压缩,至于内容最终存放在哪里面是由它的构造函数参数 cos 来负责的,而 Cos 只负责按 CRC 32 检验数据,至于数据本身最终又存放在哪里面是由 fileOutputStream 说得算,因此最终数据需要从管道中输出到 fileOutputStream 中的。其它的 ??? OutputStream 都只是进行一次额外的包装处理(装饰)。

一般来说最外面一层的 OutputStream 在 Close 时会同时让它当初接收的构造函数参数也一起 close,也就是说 out 在 close 时会调用 cos.close(); 而 cos 在 close 时会调用 fileOutputStream.close(); 通常如此,当然可能也有少数例外。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
自由程序员
2014-09-18 · 超过26用户采纳过TA的回答
知道答主
回答量:174
采纳率:0%
帮助的人:100万
展开全部
关闭的时候是从内向外关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式