Dart 如何从文件中获取ByteData

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

我想在flatter中将
文件
转换为
字节数据
对象。 大概是这样的:

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”执行某些操作)