java中的并发读/写缓冲区字节[]

2eafrhcq  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(377)

我是java新手,我想实现一个 byte[] 其中一个线程可以写入,另一个线程可以读取。
听起来它应该已经在中国实施了 java ,但我花了几个小时试图找到/理解几个类,我不知道它是否符合我的要求,以及如何使用它。
我看见了 BufferedInputStream , ByteBuffer , ByteChannel , BlockingQueue ...
有人能指出一个更具体的方向吗?我用 SDK 1.6

toiithl6

toiithl61#

对不起的, ByteBuffer 对我不好,因为这涉及到玩 position 缓冲区的一部分。
我意识到我真正需要的只是一个简单的 pipe (我不知道我怎么能忘记管道)。
我举了一个例子:

PipedOutputStream output = new PipedOutputStream();
PipedInputStream input = new PipedInputStream(output);
7z5jn7bk

7z5jn7bk2#

如果您希望简单地将字节从一个线程流到另一个线程,我建议您使用 PipedInputStream 以及 PipedOutputStream . 但请注意,由于设计错误,您可能需要这样的解决方案。
下面是你将如何做这样的事情,例如:

PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);
new YourReadingThread(in).start();
new YourWritingThread(out).start();

那你写信给谁都行 out 可供通读 in .
如果您正在寻找一个解决方案,使线程安全bytebuffer,我建议您使用 ReentrantReadWriteLock :

ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
ByteBuffer buffer = ByteBuffer.allocate(n);

// Reading thread:
lock.readLock().lock();
buffer.get(i);
lock.readLock().unlock();

// Writing thread:
lock.writeLock().lock();
buffer.put(b,i);
lock.writeLock().unlock();

相关问题