tl;dr
希望将Stream<int>
转换为Stream<List<String>>
。
长版本:
我对飞镖/飞镖和这种编程风格很陌生,所以请原谅我的noob问题。
我正在通过蓝牙发送一个包含ASCII字符串的char
/uint8_t
流。这是以颤动应用程序中的Stream<int>
的形式接收的。我希望将这个字节流拆分为字符串行。
我认为这样做的方法是将每个int转换为一个字符(用dart中的字符串表示(,然后对流进行某种拆分操作。我找不到在溪流上进行拆分的好例子,有人能帮忙吗?
谢谢。
您可以使用transform
和map
转换Stream
。下面是一个例子,我使用两个转换器从Stream
:中获取一行文本
import 'dart:async';
import 'dart:convert';
Future<void> main() async {
final myStream = Stream.fromIterable(
[072, 101, 108, 108, 111, 032, 087, 111, 114, 108, 100]);
print(await myStream
.map((asciiValue) => String.fromCharCode(asciiValue))
.transform(const LineSplitter())
.first);
// Hello World
}
应该注意的是,这个代码确实没有那么有效。通常,您会得到多个List<int>
事件,其中包含缓冲的数据量,并转换更大的块。但由于您有一个Stream<int>
,这是最简单的方法,我们将每个事件转换为一个字母。
或者,我们可以创建自己的缓冲解决方案。但这实际上取决于你如何获得数据。