首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的并发读写缓冲区byte[]

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

Stack Overflow用户
提问于 2014-03-11 13:51:06
回答 2查看 2.2K关注 0票数 2

我是Java新手,我想实现一个byte[]缓冲区,其中一个线程可以写入,另一个线程可以从中读取。

听起来它应该已经在java中实现了,但是我花了几个小时试图找到/理解几个类,我不知道它是否能实现我想要的,以及如何使用它。

我看到BufferedInputStreamByteBufferByteChannelBlockingQueue.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-12 12:16:51

对不起,ByteBuffer对我不好,因为它涉及到使用缓冲区的position

我意识到我真正需要的只是一个简单的pipe (我不知道我怎么能忘记管道)。

我举了一个来自这里的例子:

代码语言:javascript
复制
PipedOutputStream output = new PipedOutputStream();
PipedInputStream input = new PipedInputStream(output);
票数 2
EN

Stack Overflow用户

发布于 2014-03-11 14:07:25

如果您只想将字节从一个线程流到另一个线程,我建议您使用PipedInputStreamPipedOutputStream。不过,请注意,由于设计错误,您可能处于需要这样的解决方案的位置。

举个例子,下面是你如何做这样的事情:

代码语言:javascript
复制
PipedOutputStream out = new PipedOutputStream();
PipedInputStream in = new PipedInputStream(out);
new YourReadingThread(in).start();
new YourWritingThread(out).start();

然后,您写到out的任何东西都可以通过in阅读。

如果您正在寻找使线程安全的ByteBuffer的解决方案,我建议您使用ReentrantReadWriteLock

代码语言:javascript
复制
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();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22327727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档