Нужно ли сбрасывать счетчик / указатель?
Вам нужно создать новый Pcap
, снова вызвав Pcap.openStream
. API Pcap
не предоставляет никаких методов для сброса базового потока.
Файлы Pcap могут быть большими, как пара гигабайт или больше. Будет ли это добавлять значительную потерю нагрузки при каждом вызове?
Это зависит от того, насколько хороша ваша файловая система. Если мы предполагаем, что ваша файловая система находится на быстром локальном твердотельном накопителе, и вы используете ОС, которая использует оперативную память для кэширования буфера файловой системы, то чтение большого файла будет быстрым в первый раз и более быстрым во второй раз.
Это также зависит от того, что вы подразумеваете под "значительным" и что приемлемо. И сколько денег вы готовы заплатить за обновление вашего оборудования для достижения приемлемой производительности.
Не знаете ли вы, что вы знаете другой способ загрузки файлов, который позволяет избежать штрафа, если он есть?
В основном, нет.
Единственные другие альтернативы, которые я могу придумать, включают чтение или отображение всего файла в адресное пространство JVM, а затем завершение его в InputStream
. Вам все еще нужно создать Pcap
для каждого прохода через файл.
Но проблема в том, что ему требуется столько адресного пространства JVM, сколько размер файла, который вы обрабатываете. Если размер файла значительно превышает объем доступной физической памяти, он может быть ужасным:
- В лучшем случае ваша производительность будет эквивалентна повторному чтению файла из диск.
- В худшем случае ваше приложение перебивает и ставит операционную систему на колени (или убивает OOM, чтобы предотвратить это).
Текущая реализация Pcap предназначена для Избегайте этого путем , а не кэширования данных в ОЗУ. Вот как он может справляться с огромными входными файлами без исчерпания памяти, и т. Д. c.