Tra*_*ers 65 java memory stream seek
我正在寻找Java中的内存流实现.应该在.NET内存流(*)实现之后大致建模实现.
基本上我想有一个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);
}
Run Code Online (Sandbox Code Playgroud)
因此,一旦我有一个类的实例,MemoryStream
我应该能够同时创建输入和输出流,这也应该允许在任何方向上定位.内存流不必是圆形的,它应该适用于小尺寸并自动生长.内存流只需要限制在一个进程中.
任何开箱即用的代码?
(*).NET内存流
http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx
Jes*_*per 97
ByteArrayInputStream
而且ByteArrayOutputStream
正是你要找的.
这些是接口的实现InputStream
和OutputStream
从读取和写入到存储器中的字节数组.因为ByteArrayOutputStream
,在将数据写入流时,数组将自动增长.
您可以使用PipedInputStream和PipedOutputStream
像这样:
PipedOutputStream outstr = new PipedOutputStream();
PipedInputStream instr = new PipedInputStream(outstr);
Run Code Online (Sandbox Code Playgroud)
这不会直接允许您搜索,但它确实允许您从输入流中跳过所需的字节数.
请注意,无论何时写入outtr,它都会被阻塞,直到从instr中读取所有内容(即:如果我没记错,Streams不会缓冲,但你可以使用BufferedInputStream来装饰它们,那么你就不必费心了.
是否需要支持输入和输出流?如果不是,我只会使用ByteBuffer,它允许您在随机位置读/写原始类型.(最多2 GB)
您可以在阅读器和编写器之间共享ByteBuffer.
例如
// 1 GB of virtual memory outside the heap.
ByteBuffer writer = ByteBuffer.allocateDirect(1024*1024*1024);
ByteBuffer reader = writer.slice();
Run Code Online (Sandbox Code Playgroud)
您可以在线程(例如Exchanger)和进程(使用内存映射文件)之间共享内存
归档时间: |
|
查看次数: |
86398 次 |
最近记录: |