Java中的内存流



我正在寻找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);
 }

所以一旦我有一个实例从类MemoryStream I应该能够并发地同时创建输入和输出流,这也应该允许定位在任何方向。内存流需求不是圆形的,应该适合小尺寸并自动增长。只需要内存流被限制在一个过程。

有现成的代码吗?

ByteArrayInputStreamByteArrayOutputStream是您正在寻找的。

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

是否需要支持输入和输出流?如果不是,我就使用ByteBuffer,它允许你在随机位置读/写基本类型。(不超过2gb)

可以在读写器之间共享ByteBuffer。

// 1 GB of virtual memory outside the heap.
ByteBuffer writer = ByteBuffer.allocateDirect(1024*1024*1024); 
ByteBuffer reader = writer.slice();

你可以在线程(例如交换器)和进程(使用内存映射文件)之间共享内存

可以使用PipedInputStream和PipedOutputStream

:

PipedOutputStream outstr = new PipedOutputStream();
PipedInputStream instr = new PipedInputStream(outstr);

,它不直接允许你查找,但它允许你从输入流中跳过你想要的多少字节。

请注意,每当您写入outstr时,它都会被阻塞,直到从instr中读取所有内容(也就是说:如果我没记错的话,流不会缓冲,但您可以使用BufferedInputStream来装饰它们,然后您就不必麻烦了。

NIO允许您直接在内核内存中传输数据-我不确定它是否与。net的内存流完全重叠。下面是将整个文件映射到内存以供读取的简单示例。

相关内容

  • 没有找到相关文章

最新更新