我想在抖动中将File
转换为ByteData
对象。
像这样:
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);
的操作,但是如何填充它们呢?
我想念什么?
答案 0 :(得分:1)
在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;
答案 1 :(得分:0)
尝试一下:
File file = getSomeCorrectFile();
ByteData bytes = await file.readAsBytes().then((data) => ByteData.view(data as ByteBuffer));
return bytes;
答案 2 :(得分:0)
我认为以下方法应该有效:
import 'dart:io';
import 'dart:typed_data';
...
File file = getSomeCorrectFile();
Uint8List bytes = file.readAsBytesSync() as Uint8List;
return ByteData.view(bytes.buffer);
声明 File.readAsBytes
/ File.readAsBytesSync
返回List<int>
,但返回the returned object is actually a Uint8List
subtype。从那里,您可以extract its ByteBuffer
并以此构建ByteData
。
如果您不愿意依靠File.readAsBytes
/ File.readAsBytesSync
返回Uint8List
,则可以构造一个Uint8List
:
Uint8List bytes = Uint8List.fromList(file.readAsBytesSync());
或将它们组合:
Uint8List toUint8List(List<int> list) =>
(list is Uint8List) ? list : Uint8List.fromList(list);
Uint8List bytes = toUint8List(file.readAsBytesSync());
...
答案 3 :(得分:0)
这是我的类来处理这个:
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};
}
}
答案 4 :(得分:0)
这对我有用......
Uint8List uint8list = Uint8List.fromList(File(path).readAsBytesSync())