【问题标题】:Android PipedOutputStream / PipedInputStream transfer byte by byte seems wrongAndroid PipedOutputStream / PipedInputStream 逐字节传输似乎不对
【发布时间】:2011-07-06 08:14:12
【问题描述】:

PipedOutputStream的Android实现

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

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

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

是通过循环来实现的 字节[] 缓冲区 并为每个字节调用 write(byte oneByte)。见this

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

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

write [a b c] 导致 write(a) notify write(b) notify write(c) notify.

【问题讨论】:

    标签: java android inputstream outputstream


    【解决方案1】:

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

    【讨论】:

    • 我已经看到它使用自己的/android 默认实现的OutputStream。也许可能有一些约定不以字节副本的形式编写数组副本(因为在每个字节副本上它都会通知其读者)。也许android团队想要解决这个问题。事实上,我查找了 oracle 实现,它使用了高效的实现。
    • 对于高性能管道,您可以使用 java.nio.channels.Pipe
    猜你喜欢
    • 2023-04-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多