Я новичок в Dart и все еще сижу с ума от потоков. В частности, мне трудно найти правильный способ создания функции, которая берет окно из N элементов из потока, применяет к нему функцию и повторно передает результаты.
Чтобы прояснить, что я имею в виду, я привожу пример, который я реализовал сам и который привел меня к этому вопросу. Код берет байтовый поток из файла и преобразует 4-байтовые блоки в целочисленный поток. Используя await for
, я смог выполнить то, что хотел, но я ищу более идиоматическую потоковую функцию, которая выполняет то же самое, более кратко.
Stream<int> loadData(String path) async* {
final f = File(path);
final byteStream = f.openRead();
var buffer = Uint8List(8);
var i = 0;
// This is where I would like to use a windowing function
await for(var bs in byteStream) {
for(var b in bs) {
buffer[i++] = b;
if(i == 8) {
var bytes = new ByteData.view(buffer.buffer);
yield bytes.getUint16(0);
i = 0;
}
}
}
}