首页 > 解决方案 > 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?

标签: dart

解决方案


我认为以下应该有效。我试图模仿缓冲管道接口:

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

该类是通用的,因此它可以用于您想要的任何类型的数据。


推荐阅读