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。