在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);
更易于使用。
答案 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。
约翰