Я анализирую большие файлы PCAP на Java с помощью Kaitai-Struct.Всякий раз, когда размер файла превышает Integer.MAX_VALUE
байт, я сталкиваюсь с IllegalArgumentException
, вызванным ограничением размера базового ByteBuffer
.
.это не ограничение библиотеки, а ошибка в том, как я ее использую.
Поскольку проблема вызвана попыткой отобразить весь файл в ByteBuffer
, я думаю, что решение будетотображая только первую область файла, и по мере того, как данные используются, карта снова пропускает уже проанализированные данные.
Поскольку это делается в библиотеке времени выполнения Kaitai Struct, это будет означать написание моего собственного класса, расширяющего fomKatiaiStream
и перезаписать автоматически сгенерированный метод fromFile(...)
, и это на самом деле не выглядит правильным подходом.
Автоматически сгенерированный метод для анализа файла для класса PCAP:
public static Pcap fromFile(String fileName) throws IOException {
return new Pcap(new ByteBufferKaitaiStream(fileName));
}
А ByteBufferKaitaiStream
, предоставляемый библиотекой времени выполнения Kaitai Struct, поддерживается 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
.
Мне не хватает очевидного обходного пути?Действительно ли это ограничение реализации Katiati Struct в Java?