Dart 如何从文件中获取ByteData
我想在flatter中将Dart 如何从文件中获取ByteData,dart,flutter,Dart,Flutter,我想在flatter中将文件转换为字节数据对象。 大概是这样的: import 'dart:io'; File file = getSomeCorrectFile(); //This file is correct ByteData bytes = ByteData(file.readAsBytesSync()); //Doesnt compile return bytes; 我知道ByteData构造函数接收字节数的长度,并用0初始化它们,因此我可以执行类似ByteData(file.re
文件
转换为字节数据
对象。
大概是这样的:
import 'dart:io';
File file = getSomeCorrectFile(); //This file is correct
ByteData bytes = ByteData(file.readAsBytesSync()); //Doesnt compile
return bytes;
我知道ByteData
构造函数接收字节数的长度,并用0初始化它们,因此我可以执行类似ByteData(file.readAsBytesStync().length)的操作代码>但是我如何填充它们?
我缺少什么?试试这个:
File file = getSomeCorrectFile();
ByteData bytes = await file.readAsBytes().then((data) => ByteData.view(data as ByteBuffer));
return bytes;
在Dart 2.5.0或更高版本中,我认为以下各项应该可以工作:
导入'dart:io';
导入“dart:键入的_数据”;
...
File File=getSomeCorrectFile();
Uint8List bytes=file.readAsBytesSync();
返回ByteData.view(bytes.buffer);
(在Dart 2.5.0之前,文件.readAsBytesSync()
行应为:
Uint8List bytes=file.readAsBytesSync()作为Uint8List;
/用于声明返回列表
,但是。)
一旦将字节作为uint8列表
,就可以从中创建字节数据。在Dart 2.9中:
导入'dart:io';
导入“dart:键入的_数据”;
最终文件=getSomeCorrectFile();//文件
final bytes=wait file.readAsBytes();//UINT8列表
final byteData=bytes.buffer.asByteData();//拜特达
返回byteData;
下面是我的类来处理这个问题:
import 'dart:io';
import 'dart:typed_data';
class FileHandler {
final String _filePath;
FileHandler(this._filePath);
Future<Uint8List> _readToBytes() async {
var file = File.fromUri(Uri.parse(_filePath));
return await file.readAsBytes();
}
Future<Map<String, dynamic>> get data async {
var byte = await _readToBytes();
var ext = _filePath.split('.').last;
return {'byte': byte, 'extension': ext};
}
}
导入'dart:io';
导入“dart:键入的_数据”;
类文件处理程序{
最终字符串\u文件路径;
FileHandler(此.\u文件路径);
Future _readToBytes()异步{
var file=file.fromUri(Uri.parse(_filePath));
返回wait file.readAsBytes();
}
未来异步获取数据{
var byte=wait_readToBytes();
var ext=_filePath.split('.').last;
返回{'byte':byte,'extension':ext};
}
}
这是为我工作的
Uint8List uint8list = Uint8List.fromList(File(path).readAsBytesSync())
你需要ByteData做什么?@pskink我有一个API库,可以接收ByteData并将其发送到服务器。我可以改变这个库,但在我的特殊情况下不是简单的,但如果该文件是1GB长呢?您想全部阅读吗?因此此代码将执行以下操作:File('/some/File/to/read').openRead().listen((list){ByteData data=Uint8List.fromList(list).buffer.asByteData();//对“data”执行某些操作)代码>