Чтение огромного файла ~14 ГБ с использованием MappedByteBuffer
Я пытаюсь решить проблему потребителя производителя, которая требует интенсивного ввода-вывода. Константы производителя добавляют данные в файл, а потребитель читает из этого растущего файла. Размер файла обычно в ГБ (около 10 ГБ) .
Первоначально я пытался BufferedOutputStream и BufferedInputStream для чтения и записи данных в файл. Это занимает слишком много% системного ЦП, например 30-40% (это должны быть системные вызовы ввода / вывода) во время пакетов данных, поступающих в 9:30.
Глядя на файлы, отображенные в памяти, чтобы сделать это быстрее.
File fileToRead= new File("C:\\readThisFile.dat");
FileChannel inChannel = new FileInputStream(fileToRead).getChannel();
MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
byte[] data = new byte[(int)inChannel.size()];
buffer.get(data);
1) Поскольку размер файла readThisFile.dat () больше, чем длина INTEGER.MAX, inChannel.map() создает исключение.
2) Как потребитель может постоянно считывать данные, используя отображенные в памяти файлы очень больших файлов. потребитель может загрузить может быть 100 МБ каждый раз и продолжать искать больше данных?
3) Есть ли более быстрое решение, например, попытка чего-то другого, кроме файлов с отображением в памяти в Java?