1

在 Dart 中,我想阅读 BMP,所以可能是 BIG 文件。我这样做:

var inputStream = imageFile.openInputStream();
inputStream.onData = () {
  print(inputStream.available());
  inputStream.read(18); // Some headers
  int width = _readInt(inputStream.read(4));
  int height = _readInt(inputStream.read(4));
  // Another stuff ...
}

它适用于小图像,但是当我读取 3Mo 文件时,onData 会执行多次。实际上,onData 是由 65536 字节的数据包触发的。最好的做法是什么?我是否应该编写一个状态为 HEADER_STATE、COLORS_STATES、... 的自动装置来设置我的阅读状态并通过 inputStream.read 考虑是一个缓冲区?还是我错过了阅读课?我害怕错过 2 个数据包之间的一些字节。我对此有点失望,当我在 java 中这样做时,我只写:

inputStream.read(numberOfBytes);

更易于使用。

4

1 回答 1

2

打开 RandomAccessFile 后,您可以执行以下操作:

RandomAccessFile raf; // Initialized elsewhere

int bufferSize = 1024*1024; // 1 MB
int offsetIntoFile = 0;
Uint8List byteBuffer = new Uint8List(bufferSize); // 1 MB
Future<int> bytesReadFuture = raf.readList(byteBuffer, offsetIntoFile, bufferSize);

bytesReadFuture.then((bytesRead) {
    Do something with byteBuffer here.
});

还有一个同步调用readListSync。

约翰

于 2012-10-05T14:18:54.463 回答