Какой самый быстрый способ чтения и записи строк из файла с Java? - PullRequest
1 голос
/ 05 апреля 2011

Какой самый быстрый способ чтения и записи строк из файла с Java?

Мне нужно прочитать файл известного формата в String[] - где каждая строка - это один элемент в массиве- и затем вернемся к файлу.

Чтение, в частности, должно быть максимально быстрым.

Есть ли лучший способ, чем просто использовать BufferedReader и читать построчнов массив?

Ответы [ 4 ]

3 голосов
/ 05 апреля 2011

Рассмотрите возможность использования Google protobuf .

1 голос
/ 05 апреля 2011

Просто сумасшедшая идея: вы можете записать длину каждой строки в файле.Что-то вроде:

BufferedInputStream stream=new BufferedInputStream(new FileInputStream("file.bin"));
byte[] buff=new byte[256];
String[] result=new String[10];
for(int i=0;i<10;i++){
    int n=(reader.read()<<8)|reader.read();    // string length (assuming all strings are less than 64K)
    if(buff.length<n) buff=new byte[n];
    reader.read(buff,0,n);
    result[i]=new String(buff,0,n);
}
stream.close();

Это освободит BufferedReader от проверки каждого входного байта на \n.Хотя я не уверен, что это будет быстрее, чем readLine().

0 голосов
/ 05 апреля 2011

Это будет мой первый проход, при условии, что память не является проблемой (га).

  1. Получите размер файла, который находится на диске (File.length).
  2. Выделите буфер этого размера.
  3. Загрузите всю вещь за один кадр (InputStream.read (byte [])).
  4. Разбейте эту строку на подстроки полностью в памяти.
  5. Do Stuff (tm)
  6. Обратное выше для сохранения.

Имейте в виду, что Java хранит символьные данные внутри UCS-16 внутри, что означает, что ваш хороший файл ASCII собираетсявзять x2 размер на диске, чтобы учесть «расширение».Например, у вас есть файл размером 4 124 байт, файл foo.txt будет иметь по крайней мере 8 248 байт в памяти.

Все остальное будет медленнее, поскольку приложение будет разработано для работы с некоторой буферизацией и переносом (вв частности, чтобы справиться с нехваткой памяти, чтобы справиться с размером файла).

Удачи!

0 голосов
/ 05 апреля 2011

Используйте кодировщики / декодеры NIO и UTF-8, которые используют преимущества вашей статистики строк, а также используют возможности JIT.Я верю, что aalto из / в делает это, и я уверен, что вы можете найти других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...