繁体   English   中英

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

[英]Concurrent read/write buffer byte[] in java

我是Java的新手,我想实现一个byte[]的缓冲区,一个线程可以写入该缓冲区,而另一个线程可以读取该缓冲区。
听起来应该已经在java实现了,但是我花了数小时试图查找/理解多个类,而且我不知道它是否满足我的要求以及如何使用它。
我看到BufferedInputStreamByteBufferByteChannelBlockingQueue ...

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

如果您只是想将字节从一个线程流传输到另一个线程,建议您使用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();

抱歉, ByteBuffer对我不好,因为它涉及播放缓冲区的position
我意识到我真正需要的只是一个简单的pipe (我不知道该如何忘记管道)。

我从这里举了一个例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM