3

PipedOutputStream 的 Android 实现

write(byte[] buffer, int offset, int count) 

是根据 write(byte oneByte) 来实现的。更具体的 PipedOutputStream

write(byte[] buffer, int offset, int count)

通过遍历 byte[] 缓冲区并为每个字节调用 write(byte oneByte) 来实现。看到这个

以这种方式执行此操作会导致在 PipedInputStream 上对每个字节进行接收调用。此接收会导致 notifyAll 唤醒阅读器并使其阅读。通过这种方式,您可以获得很多单字节读取。

我可以看到这是一个正确的实现,但速度很慢。是否有一些 Java 约定在某种程度上造成了这种错误?因为 PipedOutputStream 上的数组写入现在与通知 PipedInputStream 交错。

write [abc] 导致 write(a) notify write(b) notify write(c) notify。

4

1 回答 1

0

是的,您链接的代码似乎暗示它使用默认实现OutputStream来按原样发送每个单曲byte。据我所知,这实际上是正确的,但可能效率很低。

于 2011-03-01T08:41:41.557 回答