dart - What Dart library to use to implement a Pipe of Buffers?
问题描述
I want to find a way to reproduce the behavior of this Node library buffer-pipe
( https://www.npmjs.com/package/buffer-pipe )
But I can't find a proper library in Dart. Any suggestions?
解决方案
我认为以下应该有效。我试图模仿缓冲管道接口:
import 'dart:collection';
class BufferPipe<T> {
int _bytesRead = 0;
int _bytesWrote = 0;
final DoubleLinkedQueue<T> _buffer = DoubleLinkedQueue<T>();
List<T> read(int length) {
final list = <T>[];
for (var i = 0; i < length && _buffer.isNotEmpty; i++) {
list.add(_buffer.removeFirst());
_bytesRead++;
}
return list;
}
void write(Iterable<T> data) {
final oldLength = _buffer.length;
_buffer.addAll(data);
_bytesWrote += _buffer.length - oldLength;
}
bool get end => _buffer.isEmpty;
int get bytesRead => _bytesRead;
int get bytesWrote => _bytesWrote;
}
void main() {
final buffer = BufferPipe<int>();
print('Read count: ${buffer.bytesRead} Write count: ${buffer.bytesWrote}');
print('No more data? ${buffer.end}');
buffer.write([1, 2, 4, 5, 6, 7, 8, 9, 10]);
print('Read count: ${buffer.bytesRead} Write count: ${buffer.bytesWrote}');
print('No more data? ${buffer.end}');
print(buffer.read(6));
print('Read count: ${buffer.bytesRead} Write count: ${buffer.bytesWrote}');
print('No more data? ${buffer.end}');
print(buffer.read(6));
print('Read count: ${buffer.bytesRead} Write count: ${buffer.bytesWrote}');
print('No more data? ${buffer.end}');
print(buffer.read(6));
print('Read count: ${buffer.bytesRead} Write count: ${buffer.bytesWrote}');
print('No more data? ${buffer.end}');
}
返回:
Read count: 0 Write count: 0
No more data? true
Read count: 0 Write count: 9
No more data? false
[1, 2, 4, 5, 6, 7]
Read count: 6 Write count: 9
No more data? false
[8, 9, 10]
Read count: 9 Write count: 9
No more data? true
[]
Read count: 9 Write count: 9
No more data? true
该类是通用的,因此它可以用于您想要的任何类型的数据。
推荐阅读
- python - 无法在安装了 anaconda3 和 python 3.5 的系统上导入 pyqt5 库
- ruby - 简化 `if then` 块
- python - 如何使用 python 在 html 代码中定位 td 类?
- sql - Oracle-Join 多次使用不同的 where 条件与同一个表
- python - 检测由不同颜色组成的水下门
- python - 使用 python kivy 构建应用程序时出现错误
- listview - 在 uwp 中,当我在 c# 代码中更改数据时,它不会在前视图上更新
- python - Kivy,在Android中检测倾斜设备
- ruby - 红宝石中的数字1e18是什么意思
- netbeans - Netbeans 自动完成、搜索和其他功能不起作用