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

hud*_*dac 1 java multithreading buffer byte

我是Java的新手,我想实现byte[]一个线程可以写入的缓冲区,另一个线程可以读取.
它听起来应该已经实现了java,但我花了几个小时试图找到/理解几个类,我不明白它是否做我想要的,以及如何使用它.
我看到BufferedInputStream,ByteBuffer,ByteChannel,BlockingQueue...

有人可以指出一个更具体的方向吗?我用SDK 1.6

Ben*_*kay 5

如果您希望简单地将字节从一个线程流式传输到另一个线程,我建议您使用PipedInputStreamPipedOutputStream.虽然请注意,由于设计错误,您可能需要这样的解决方案.

以下是你将如何做这样的事情,例如:

PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);
new YourReadingThread(in).start();
new YourWritingThread(out).start();
Run Code Online (Sandbox Code Playgroud)

然后你写的任何东西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();
Run Code Online (Sandbox Code Playgroud)