У меня есть текстовый файл с тысячами строк данных, таких как следующие:Чтение огромного текстового файла ascii быстро в Java. Нужна помощь по использованию MappedByteBuffer
38.48,88.25
48.20,98.11
100.24,181.39
83.01,97.33
... и этот список продолжает идти (тысячи строк просто так).
Я понял, как разделить эти данные в пригодных для использования маркеров с помощью FileReader и Сканер, но этот метод является слишком медленным.
Я создал следующий разделитель: src.useDelimiter (", | \ n");
, а затем использовать класс сканера nextDouble() для получения каждой части данных.
Я провел много исследований, и похоже, что решение должно использовать MappedByteBuffer, чтобы поместить данные в память и получить к нему доступ. Проблема в том, что я не знаю, как использовать MappedByteBuffer для разделения этих данных на используемые токены.
Я нашел этот сайт: http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html - который помогает мне отображать файл в память и объясняет, как читать файл, но похоже, что данные возвращаются в виде байта или, возможно, в двоичной форме? Файл, к которому я пытаюсь получить доступ, - ascii, и мне нужно также прочитать данные как ascii. Может ли кто-нибудь объяснить, как это сделать? Есть ли способ сканировать файл, отображаемый в память, таким же образом, как я сделал с помощью сканера с предыдущим методом FileReader? Или есть другой метод, который будет быстрее? Мой текущий метод занимает около 800 раз столько времени, сколько потребуется.
Я знаю, что некоторые могут сказать, что я пытаюсь изобретать колесо, но это для академических целей и, таким образом, мне не разрешено использовать внешние библиотеки.
Спасибо!
вам нужно сохранить все данные в памяти или просто читать его строки в каждой строке делать. – Elmer
Мне нужно прочитать строку в строке для запроса данных. В настоящее время этот процесс занимает около 40 секунд для обработки почти миллиона строк данных, но мне это нужно сделать быстрее. Если бы я мог сделать это менее чем за секунду, это было бы здорово. – etho201
Я бы предложил сделать один проход по данным инициализации и сохранить его в соответствующей структуре в памяти. Тогда доступ к данным будет быстрым, и вам не нужно будет беспокоиться о скорости, с которой вы можете читать. – Elmer