【问题标题】:Java: Keep binary file blob in memory for multiple uses (byte[]? ByteBuffer? ...?)Java:将二进制文件 blob 保存在内存中以供多次使用(byte[]?ByteBuffer?...?)
【发布时间】:2017-07-22 14:36:44
【问题描述】:

我从InputStream 读取二进制文件,并且必须将它们保存在内存中以供进一步处理。最明显的做法是将每个文件的读取数据保存在byte[] 数组中。但我想有更优雅的方法可以围绕内存中的“文件 blob”提供一些 OO API。你会推荐什么?

  • 必须可以进行多次读取,而不必重建数据结构(读取访问不得影响文件 blob 的内部状态)
  • (随机)不需要写访问。无需修改某些字节
  • 最后,经过多个访问者的检查后,保存在内存中的文件 blob 将被写入磁盘
  • 仅纯 Java 8,没有第三方库,如 Apache Commons、Guava 等。

【问题讨论】:

  • 能否将整个 blob 保存在内存中,还是需要实现某种形式的流处理?
  • 嗨弗洛里安,这些文件可以完整地保存在内存中。这些文件通常不超过几 MB。内存消耗不是问题,特别是因为我只是暂时需要文件内容。

标签: java file byte in-memory


【解决方案1】:

如果所有内容都适合内存并且数据很快被丢弃,请使用byte[]s 或非直接(!)java.nio.ByteBuffers(无论如何它们只是字节数组的包装器)。字节缓冲区的优点是您可以使用asReadOnlyBuffer() 方法提供对同一blob 的引用,通过该引用不能对blob 进行任何更改。对于byte[],这需要一个防御性副本。关于来自ByteBuffer 的额外开销:Hotspot 编译器非常擅长消除这种情况,而且您的 blob 似乎相当大,因此额外分配应该无关紧要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多