首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java中的内存流

Java中的内存流
EN

Stack Overflow用户
提问于 2011-12-09 03:43:48
回答 4查看 104.7K关注 0票数 75

我正在寻找一个用Java实现的内存流。实现应该在.NET memory stream实现之后进行粗略的建模。

基本上,我希望有一个类MemoryStream,它必须工厂方法:

代码语言:javascript
复制
 class MemoryStream {
     MemoryInput createInput();
     MemoryOutput createOutput();
 }

 class MemoryInput extends InputStream {
    long position();
    void seek(long pos);
 }

 class MemoryOutput extends OutputStream {
    long position();
    void seek(long pos);
 }

因此,一旦我有了来自类MemoryStream的实例,我就应该能够同时创建输入流和输出流,这也应该允许在任何方向上定位。内存流不需要是循环的,它应该在较小的大小上工作良好并自动增长。内存流只需要限制在一个进程中。

是否有可用的开箱即用代码?

EN

回答 4

Stack Overflow用户

发布于 2011-12-09 06:06:16

ByteArrayInputStreamByteArrayOutputStream就是你要找的东西。

这些是对内存中的字节数组进行读写的接口InputStreamOutputStream的实现。对于ByteArrayOutputStream,当您向流中写入数据时,数组将自动增长。

票数 113
EN

Stack Overflow用户

发布于 2011-12-09 03:47:15

它需要支持输入流和输出流吗?如果不是,我将只使用ByteBuffer,它允许您在随机位置读/写原始类型。(最高2 GB)

您可以在读取器和写入器之间共享ByteBuffer。

例如:

代码语言:javascript
复制
// 1 GB of virtual memory outside the heap.
ByteBuffer writer = ByteBuffer.allocateDirect(1024*1024*1024); 
ByteBuffer reader = writer.slice();

您可以在线程(例如Exchanger)和进程(使用内存映射文件)之间共享内存

票数 9
EN

Stack Overflow用户

发布于 2011-12-09 03:53:31

您可以使用PipedInputStream和PipedOutputStream

如下所示:

代码语言:javascript
复制
PipedOutputStream outstr = new PipedOutputStream();
PipedInputStream instr = new PipedInputStream(outstr);

这不会直接允许您查找,但它确实允许您从输入流中跳过所需的字节数。

请注意,无论何时写入outstr,它都会被阻塞,直到从instr中读取所有内容(即:如果我没记错的话,流不会缓冲,但您可以用BufferedInputStream修饰它们,这样就不必费心了。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8436688

复制
相关文章

相似问题

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