读取文件作为InputStream的最佳实践

时间:2012-10-05 10:16:01

标签: inputstream dart

在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 ...
}

它适用于小图像但是当我读取3o文件时,onData会被执行多次。实际上,onData被65536字节的数据包触发。 最佳做法是什么? 我应该编写一个自动机,其状态如HEADER_STATE,COLORS_STATES,...设置什么是我的读取状态,并考虑通过inputStream.read是一个缓冲区? 或者我想念读者课程? 我担心错过2个数据包之间的一些字节。 我对此有点失望,当我在java中这样做时,我只想写:

inputStream.read(numberOfBytes);

更易于使用。

1 个答案:

答案 0 :(得分: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。

约翰