gpt4 book ai didi

inputstream - 最佳做法是将文件读取为InputStream

转载 作者:行者123 更新时间:2023-12-03 03:29:39 28 4
gpt4 key购买 nike

在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);

更易于使用。

最佳答案

打开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。

约翰

关于inputstream - 最佳做法是将文件读取为InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12744113/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com