我正在使用 Kaitai-Struct 在 Java 中解析大型 PCAP 文件。每当文件大小超过Integer.MAX_VALUE
字节时,我都会面临IllegalArgumentException
由底层ByteBuffer
.
我没有在其他地方找到对这个问题的引用,这让我相信这不是图书馆的限制,而是我使用它的方式的错误。
由于问题是由于尝试将整个文件映射到文件中引起的,因此ByteBuffer
我认为解决方案将仅映射文件的第一个区域,并且随着数据的消耗,映射再次跳过已解析的数据。
由于这是在 Kaitai Struct Runtime 库中完成的,这意味着编写我自己的扩展 fom 的类KatiaiStream
并覆盖自动生成的fromFile(...)
方法,这似乎不是正确的方法。
从文件中解析 PCAP 类的自动生成方法是。
public static Pcap fromFile(String fileName) throws IOException {
return new Pcap(new ByteBufferKaitaiStream(fileName));
}
Kaitai ByteBufferKaitaiStream
Struct Runtime 库提供的ByteBuffer
.
private final FileChannel fc;
private final ByteBuffer bb;
public ByteBufferKaitaiStream(String fileName) throws IOException {
fc = FileChannel.open(Paths.get(fileName), StandardOpenOption.READ);
bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
}
这反过来又受到ByteBuffer
最大尺寸的限制。
我错过了一些明显的解决方法吗?这真的是对Java中Katiati Struct实现的限制吗?