2014-10-02 3 views
2

парень дартс программистов.Как проверить конец Stream в Dart?

Я читаю файл, используя Stream, как показано ниже.

Stream<List<int>> stream = new File(filepath).openRead(); 
stream 
    .transform(UTF8.decoder) 
    .transform(const LineSpilitter()) 
    .listen((line){ 
     // TODO: check if this is the last line of the file 
     var isLastLine; 
    }); 

Я хочу, чтобы проверить линию в слушать(), является ли последняя строка файла.

ответ

3

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

Stream<List<int>> stream = new File('main.dart').openRead(); 
    stream. 
    .transform(UTF8.decoder) 
    .transform(const LineSpilitter()) 
    .listen((line) { 
// TODO: check if this is the last line of the file 
    var isLastLine; 
    } 
    ,onDone: (x) => print('done')); // <= add a second callback 
+0

Спасибо за ответ. При анализе текстового файла мне нужен способ обработки последнего сегмента по-другому, чем раньше. Я не могу использовать onDone, потому что все это «сделано», поэтому текст в переменной «line» больше не доступен. – seongjoo

+2

Я понимаю. Что вы можете сделать, так это буферизировать последнюю строку и обрабатывать ее только после того, как вы получили следующую строку. 'onDone' обрабатывает последнюю буферную строку. –

+0

Я думаю, что мог сработать. Если мне нужно сделать это без обходного пути, мне может потребоваться прямое обращение к байту из файла без использования Stream. – seongjoo

Смежные вопросы