Java 中的内存流

2022-08-31 13:02:39

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

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


答案 1

ByteArrayInputStreamByteArrayOutputStream就是你正在寻找的。

这些是接口的实现,用于读取和写入内存中的字节数组。对于 ,数组将在您将数据写入流时自动增长。InputStreamOutputStreamByteArrayOutputStream


答案 2

它是否需要支持输入和输出流?如果不是这样,我会只使用ByteBuffer,它允许您在随机位置读取/写入基元类型。(最多 2 GB)

您可以在读取器和写入器之间共享字节缓冲区。

例如:

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

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