我从InputStream
读取二进制文件,并且必须将它们保存在内存中以供进一步处理。最明显的方法是将每个文件的读取数据保存在一个 byte[] 数组中。但我想有更优雅的方法可以围绕内存中的“文件 blob”提供一些 OO API。您会推荐什么?
- 必须可以进行多次读取,而无需重建数据结构(读取访问不得影响文件 blob 的内部状态)
- (随机)不需要写访问权限。无需修改某些字节
- 最后,经过多个访问者的检查后,保存在内存中的文件 blob 将被写入磁盘
- 仅限纯 Java 8,无 Apache Commons、Guava 等第三方库。
最佳答案
如果所有内容都适合内存并且数据很快被丢弃,请使用 byte[]
或非直接 (!) java.nio.ByteBuffer
(其中无论如何,它们只是字节数组的包装器)。字节缓冲区的优点是,您可以使用 asReadOnlyBuffer()
方法提供对同一 Blob 的引用,但不能对 Blob 进行任何更改。对于byte[]
,这需要一个防御性副本。关于 ByteBuffer 的额外开销:Hotspot 编译器非常擅长消除这种开销,而且您的 blob 似乎相当大,因此额外的分配应该不重要。
关于Java:将二进制文件 blob 保留在内存中以供多次使用(byte[]?ByteBuffer?...?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45255712/