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

java中的并发读/写缓冲区字节[],java,multithreading,buffer,byte,Java,Multithreading,Buffer,Byte,我是Java新手,我想实现一个byte[]缓冲区,一个线程可以写入,另一个线程可以读取。 听起来它应该已经在java中实现了,但我花了几个小时试图找到/理解几个类,但我不知道它是否符合我的要求,以及如何使用它。 我看到BufferedInputStream,ByteBuffer,ByteChannel,BlockingQueue 有人能指出一个更具体的方向吗? 我使用的是sdk1.6如果您希望简单地将字节从一个线程流到另一个线程,我建议您使用PipedInputStream和pipedoutps

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

有人能指出一个更具体的方向吗?
我使用的是
sdk1.6

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

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

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

对不起,
ByteBuffer
对我不好,因为它涉及到对缓冲区的
位置的操作。
我意识到我真正需要的只是一个简单的
管道
(我不知道我怎么能忘记管道)

我举了一个例子:


读/写是否总是顺序的?字节数组的大小是固定的吗?不,我不相信Java有这样一个内置类,您必须自己编写并适当地同步它(注意:这里的“顺序”是指“非随机”,即您不从数组中间读取/写入数组中间)字节数组不是固定大小。读写器不必是连续的…然后它是为您定制的类…@fge,对不起,我刚刚看到您的编辑。它是连续的。(读卡器读取队列中可用的第一个字节块,写卡器写入队列末尾)即使这样,您也需要一个自定义类。如果读/写的大小是固定的,那会更简单,但太简单了,不是吗?;)
PipedOutputStream output = new PipedOutputStream();
PipedInputStream input = new PipedInputStream(output);