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

时间:2014-03-11 13:51:06

标签: java multithreading buffer byte

我是Java的新手,我想实现一个线程可以写入的byte[]缓冲区,另一个线程可以读取。
听起来应该已经在java中实现了,但是我花了好几个小时试图找到/理解了几个类,我不明白它是否符合我的要求,以及如何使用它。登记/> 我看到BufferedInputStreamByteBufferByteChannelBlockingQueue ......

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

2 个答案:

答案 0 :(得分:5)

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

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

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();

答案 1 :(得分:2)

抱歉,ByteBuffer对我不利,因为它涉及到缓冲区的position。 我意识到我真正需要的只是一个简单的pipe(我不知道怎么会忘记管道)。

我使用了来自here的示例:

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