【发布时间】:2012-03-18 00:52:36
【问题描述】:
我在 SO 上看到了两个答案,声称 Java 提供的 PipedInputStream 和 PipedOutputStream 类存在缺陷。但他们没有详细说明他们出了什么问题。他们真的有缺陷吗?如果有,以什么方式?我目前正在编写一些使用它们的代码,所以我想知道我是否走错路了。
One answer 说:
PipedInputStream和PipedOutputStream已损坏(关于线程)。他们假设每个实例都绑定到一个特定的线程。这很奇怪。
在我看来,这既不奇怪也不破碎。或许作者心中还有一些其他的缺陷?
在实践中,最好避免使用它们。我在 13 年中使用过一次,但我希望我没有。
但是那个作者记不起问题出在哪里了。
与所有类一样,尤其是在多线程中使用的类,如果您滥用它们,就会遇到问题。所以我不认为PipedInputStream 可能抛出的不可预测的"write end dead" IOException 是一个缺陷(未能连接到close() 是一个错误;有关更多信息,请参阅Daniel Ferbers 的文章Whats this? IOException: Write end dead) .还有哪些其他声称的缺陷?
【问题讨论】:
-
这个stackoverflow.com/questions/484119/… 涵盖了它。它们并不是真正的“缺陷”,只是有点棘手,而且通常还有一种符号代码的味道,如果你 100% 确定你需要它们并且设计中没有错误,那么使用它们就没有真正的问题......
-
快速浏览一下,因为我想使用一个。它至少是“Under Featured”,因为读取线程并没有真正等待写入线程写入完整的读取请求,并且如果写入器关闭它则以 EOF 异常中止等。它具有非常原始的线程处理和同步,并且要求缓冲区与最大读取请求一样大。
标签: java multithreading io