Java Android PipedOutStream/PipedInputStream逐字节传输似乎是错误的
PipedOutputStream的Android实现Java Android PipedOutStream/PipedInputStream逐字节传输似乎是错误的,java,android,inputstream,outputstream,Java,Android,Inputstream,Outputstream,PipedOutputStream的Android实现 write(byte[] buffer, int offset, int count) write(byte[] buffer, int offset, int count) 以写入方式实现(字节一字节)。 更具体的是PipedOutputStream write(byte[] buffer, int offset, int count) write(byte[] buffer, int offset, int count) 通
write(byte[] buffer, int offset, int count)
write(byte[] buffer, int offset, int count)
以写入方式实现(字节一字节)。
更具体的是PipedOutputStream
write(byte[] buffer, int offset, int count)
write(byte[] buffer, int offset, int count)
通过在
字节[]缓冲区
并为每个字节调用write(byte one byte)。看
以这种方式执行此操作将导致对PipedInputStream的每个字节进行接收调用。此接收将导致notifyAll,从而唤醒读卡器并使其读取。通过这种方式可以读取大量的单字节数据
我可以看出这是一个正确的实现,但速度很慢。
是否有某种Java约定在某种程度上导致了这种错误?因为数组在PipedOutStream上的写入现在与通知PipedInputStream交错
写入[a b c]会导致写入(a)notify write(b)notify write(c)notify。是的,您链接的代码似乎暗示它使用默认的
OutputStream
实现按原样发送每个字节。据我所知,这个实际上是正确的,但可能效率很低。我已经看到它使用自己的/android默认OutputStream实现。可能会有一些惯例,不以字节副本的形式写入数组副本(因为在每个字节副本上,它都会通知读卡器)。也许安卓团队想要解决这个问题。事实上,我查找了oracle实现,它使用了高效的实现