我正试图绕着 Dart Streams 转转。特别是命令行实用程序的cat
这个示例具有以下代码行:
Stream<List<int>> stream = new File(path).openRead();
// Transform the stream using a `StreamTransformer`. The transformers
// used here convert the data to UTF8 and split string values into
// individual lines.
return stream
.transform(UTF8.decoder)
.transform(const LineSplitter())
.listen((line) {
if (showLineNumbers) {
stdout.write('${lineNumber++} ');
}
stdout.writeln(line);
}).asFuture().catchError((_) => _handleError(path));
Stream<T>
as的声明让Stream<List<int>>
我有点困惑。为什么不声明为Stream<int>
. List<> 类型如何使它与众不同。如果它是一个列表,订阅者事件是否以某种方式缓冲?什么类型(如 中
<T>
)被传递给第一个转换?是一个int
还是一个List<int>
?什么类型被传递给每个下一个转换,什么决定了它们的类型。
此示例是否在将转换结果传递给下一个转换之前读取整个文件?如果是这样,是否有一个示例说明如何流式传输类似于此 Node 问题的非常大的文件Parsing huge logfiles in Node.js - read in line-by-line