Fre*_*ind 5 binary stream request dart
HttpRequest在Dart中,是一个Stream<List<int>>,如何获取二进制内容为List<int>?
我试过了:
request.toList().then((data) {
// but data is a List<List<int>> !!!
});
Run Code Online (Sandbox Code Playgroud)
看来我不应该使用toList.我应该使用哪种方法?
一种方法是设置onDone回调listen().回调在完成后触发.然后只需创建一个整数列表,并为每个事件添加它:
List<int> data = [];
request.listen(data.addAll, onDone: () {
// `data` has here the entire contents.
});
Run Code Online (Sandbox Code Playgroud)
或者,这是一个单行:
request.reduce((p, e) => p..addAll(e)).then((data) {
// `data` has here the entire contents.
});
Run Code Online (Sandbox Code Playgroud)
我还将添加Anders Johnsen使用BytesBuilder课程的重要提示,我认为您应该更喜欢:
request.fold(new BytesBuilder(), (b, d) => b..add(d)).then((builder) {
var data = builder.takeBytes();
});
Run Code Online (Sandbox Code Playgroud)
我们最近添加了一个BytesBuilder可用的dart:io.有关详细信息,请参见此处
在您的情况下,代码可能如下所示:
request.fold(new BytesBuilder(), (builder, data) => builder..add(data))
.then((builder) {
var data = builder.takeBytes();
// use data.
});
Run Code Online (Sandbox Code Playgroud)
关于使用的一个很酷的事情BytesBuilder是它针对大块的二进制数据进行了优化.请注意,我正在使用它takeBytes来获取内部缓冲区BytesBuilder,避免额外的副本.
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |