Чтение огромного файла ~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?

0 ответов

Другие вопросы по тегам