如何从文件中获取 ByteData

Mau*_*ini 13 dart flutter

我想在颤振中将Filea转换为一个ByteData对象。像这样的东西:

import 'dart:io';
File file = getSomeCorrectFile(); //This file is correct
ByteData bytes = ByteData(file.readAsBytesSync()); //Doesnt compile
return bytes; 
Run Code Online (Sandbox Code Playgroud)

我知道ByteData构造函数接收字节数的长度并将它们初始化为 0,所以我可以做类似的事情,ByteData(file.readAsBytesStync().length);但是我该如何填充它们?我错过了什么?

jam*_*lin 28

在 Dart 2.5.0 或更高版本中,我认为以下内容应该有效:

import 'dart:io';
import 'dart:typed_data';

...
File file = getSomeCorrectFile();
Uint8List bytes = file.readAsBytesSync();
return ByteData.view(bytes.buffer);
Run Code Online (Sandbox Code Playgroud)

(在 Dart 2.5.0 之前,该file.readAsBytesSync()行应该是:

Uint8List bytes = file.readAsBytesSync() as Uint8List;
Run Code Online (Sandbox Code Playgroud)

File.readAsBytes/File.readAsBytesSync曾经被声明为返回 a List<int>,但返回的对象实际上是一个Uint8List子类型。)

一旦您将字节作为 a Uint8List,您就可以提取它ByteBuffer从中构造 a ByteData


Bou*_*egh 10

在 Dart 2.9 中:

import 'dart:io';
import 'dart:typed_data';

final file = getSomeCorrectFile(); // File
final bytes = await file.readAsBytes(); // Uint8List
final byteData = bytes.buffer.asByteData(); // ByteData

return byteData;
Run Code Online (Sandbox Code Playgroud)


moh*_*esR 5

这对我有用......

  Uint8List uint8list = Uint8List.fromList(File(path).readAsBytesSync())
Run Code Online (Sandbox Code Playgroud)