Чтение файлов с буферизацией при флаттере

#android #dart #flutter

#Android #dart #флаттер

Вопрос:

У меня есть следующий код Dart, и я пытаюсь сделать чтение файла буферизованным. Точно так же, как Java BufferedReader или C ifstream . Есть ли такая функциональность? Я даже не могу найти буфер, упомянутый в file.dart nor file_impl.dart . Если я правильно понял свою отладку, кажется, что Dart читает весь файл сразу.

Итак, кто-нибудь может помочь мне сделать его буферизированным или указать мне правильное направление, где находится буфер?

 final file = File(join(documentsDirectory, "xxx.txt"));
final List<String> lines = await file.readAsLines(); //file.readAsLinesSync()
lines.forEach((line) {
    ....
});
 

Комментарии:

1. вместо этого используйте LineSplitter

2. @pskink Да. Но скорость для меня не имеет значения. Я хотел буфер с переменным размером.

Ответ №1:

Использовать file.openRead() . Это вернет Stream количество байтов. Если вы хотите читать как символы, transform поток с использованием соответствующего декодера (вероятно utf8 ).

Как говорится, вы должны прочитать поток до конца или отменить его.

Комментарии:

1. Хорошо, спасибо. На данный момент это кажется решением. Правильно ли я понимаю, что у него есть буфер размера _blockSize = 64 * 1024 , который нельзя изменить?

2. Я уже замечал, что, похоже, он использует 64 КБ, да. У меня никогда не было необходимости его менять.

3. не могли бы вы взглянуть на мое редактирование, если у вас тоже есть ответ на это?

4. Вы находитесь в режиме выпуска или в режиме отладки? Это будет иметь большое значение.

5. Исходный код readAsLines доступен в file_impl.dart , поэтому вы должны иметь возможность поэкспериментировать с двумя разными подходами.