WedX - журнал о программировании и компьютерных науках

Как получить ByteData из файла

Я хочу преобразовать объект 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);, но тогда как мне их заполнить? Что мне не хватает?

08.05.2019

  • зачем тебе этот ByteData? 08.05.2019
  • @pskink У меня есть библиотека API, которая получает ByteData и отправляет ее на сервер. Я мог бы изменить эту библиотеку, но в моем конкретном случае это не так просто 08.05.2019
  • но что, если этот файл имеет длину 1 ГБ? хочешь прочитать все? 08.05.2019
  • поэтому этот код сделает это: File('/some/file/to/read').openRead().listen((list) { ByteData data = Uint8List.fromList(list).buffer.asByteData(); // do something with 'data' }); 09.05.2019

Ответы:


1

Я считаю, что в Dart 2.5.0 или более поздней версии должно работать следующее:

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

...
File file = getSomeCorrectFile();
Uint8List bytes = file.readAsBytesSync();
return ByteData.view(bytes.buffer);

(До Dart 2.5.0 строка file.readAsBytesSync() должна быть:

Uint8List bytes = file.readAsBytesSync() as Uint8List;

File.readAsBytes/File.readAsBytesSync раньше объявлялся возвращающим List<int>, но возвращенный объект на самом деле был подтипом Uint8List.)

Получив байты в виде Uint8List, вы можете извлечь его ByteBuffer и создайте из него ByteData.

08.05.2019

2

в Дарт 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;
07.09.2020

3

Попробуй это:

File file = getSomeCorrectFile(); 
ByteData bytes = await file.readAsBytes().then((data) => ByteData.view(data as ByteBuffer)); 
return bytes;
08.05.2019

4

вот мой класс, чтобы справиться с этим:

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};
    }
}
01.04.2021

5

это сработало для меня ...

  Uint8List uint8list = Uint8List.fromList(File(path).readAsBytesSync())
16.05.2021
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]