#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
, поэтому вы должны иметь возможность поэкспериментировать с двумя разными подходами.