我正在寻找一个用Java实现的内存流。实现应该在.NET memory stream实现之后进行粗略的建模。
基本上,我希望有一个类MemoryStream
,它必须工厂方法:
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
的实例,我就应该能够同时创建输入流和输出流,这也应该允许在任何方向上定位。内存流不需要是循环的,它应该在较小的大小上工作良好并自动增长。内存流只需要限制在一个进程中。
是否有可用的开箱即用代码?
发布于 2011-12-09 06:06:16
ByteArrayInputStream
和ByteArrayOutputStream
就是你要找的东西。
这些是对内存中的字节数组进行读写的接口InputStream
和OutputStream
的实现。对于ByteArrayOutputStream
,当您向流中写入数据时,数组将自动增长。
发布于 2011-12-09 03:47:15
它需要支持输入流和输出流吗?如果不是,我将只使用ByteBuffer,它允许您在随机位置读/写原始类型。(最高2 GB)
您可以在读取器和写入器之间共享ByteBuffer。
例如:
// 1 GB of virtual memory outside the heap.
ByteBuffer writer = ByteBuffer.allocateDirect(1024*1024*1024);
ByteBuffer reader = writer.slice();
您可以在线程(例如Exchanger)和进程(使用内存映射文件)之间共享内存
发布于 2011-12-09 03:53:31
您可以使用PipedInputStream和PipedOutputStream
如下所示:
PipedOutputStream outstr = new PipedOutputStream();
PipedInputStream instr = new PipedInputStream(outstr);
这不会直接允许您查找,但它确实允许您从输入流中跳过所需的字节数。
请注意,无论何时写入outstr,它都会被阻塞,直到从instr中读取所有内容(即:如果我没记错的话,流不会缓冲,但您可以用BufferedInputStream修饰它们,这样就不必费心了。
https://stackoverflow.com/questions/8436688
复制相似问题