java - 从 Java MemorySegment 高效读取的模式
问题描述
我正在使用 Java 从(可能)大文件中读取(可能)大量数据 - 该场景是来自 HEIF 等文件格式的未压缩图像。可能大于 2G。写作是未来的需要,但这个问题仅限于阅读。
HEIF 格式(源自 ISO 基础媒体文件格式 - ISO/IEC 14496-12)是可变大小的“盒子”——您读取盒子的长度和种类,然后对盒子进行一些适当的解析。在我的设计中,我将解析出小的盒子,并保留对大容量存储 ( mdat
) 偏移的引用,以便能够根据要求提取数据以进行渲染/处理。
我正在考虑两个选项 - 多个 MappedByteBuffer(因为这是 2G 限制)和一个MemorySegment(来自内存映射文件)。我不清楚哪个可能更有效。MappedByteBuffer 拥有所有不错的 ByteBuffer API,但我需要管理多个实体。MemorySegment 将是一个条目,但看起来我需要创建切片视图来获取我可以从中读取的任何内容(例如字节数组或 ByteBuffer),这看起来像是同一问题的不同版本。MemorySegment 的第二个好处是,当我需要使用其他一些非 Java API(例如将图像输入硬件编码器进行压缩)时,它可能会带来更好的设计。我还实现并读取了 MemorySegment 的骨架(只是有一些粗略的假设,我可以将它变成单个 ByteBuffer)。
是否存在从 MemorySegment 高效读取的新兴模式?如果做不到这一点,我在 MemorySegment API 中是否缺少一些东西?
解决方案
推荐阅读
- html - 更改由“空白:正常”生成的换行符的高度
- multithreading - gsoap 多线程问题(客户端/服务器)
- angular - Angular 5 服务单元测试与 http async
- python - (Python 读取 CSV)这样或那样编写代码有区别吗?
- java - Log4J ClassNotFoundException
- vb6 - 无法在 Windows 10 上安装 VB6 IDE
- tomcat - Tomcat LockOutRealm 错误/用户锁定后显示错误消息
- javascript - 从 Angular 2 发送安静的请求
- html - 全高显示:表格单元格内容不使父级 100%
- ios - 如何在呈现 UIViewController 之前预加载 MKMapView?