2 Câu hỏi: Cách nhận ByteData từ một tệp

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi muốn chuyển đổi một đối tượng File thành một đối tượng ByteData trong trạng thái rung. Một cái gì đó như thế này:

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

Tôi hiểu rằng hàm tạo ByteData nhận được độ dài của số byte và khởi tạo chúng bằng 0, vì vậy tôi có thể làm gì đó như ByteData(file.readAsBytesStync().length); nhưng sau đó tôi phải điền như thế nào? Tôi đang thiếu gì?

    
0
  1. bạn cần cái gì ByteData để làm gì?
    2019-05-08 16: 41: 24Z
  2. @ pskink Tôi có thư viện API nhận ByteData và đăng lên máy chủ. Tôi có thể thay đổi thư viện này nhưng trong trường hợp cụ thể của tôi không đơn giản
    2019-05-08 16: 52: 28Z
  3. nhưng nếu tệp đó dài 1GB thì sao? Bạn có muốn đọc tất cả không?
    2019-05-08 16: 55: 35Z
  4. vì vậy mã này sẽ làm điều đó: File('/some/file/to/read').openRead().listen((list) { ByteData data = Uint8List.fromList(list).buffer.asByteData(); // do something with 'data' });
    2019-05-09 05: 18: 54Z
2 Câu trả lời                              2                         

Hãy thử điều này:

File file = getSomeCorrectFile(); 
ByteData bytes = await file.readAsBytes().then((data) => ByteData.view(data as ByteBuffer)); 
return bytes;
    
0
2019-05-08 17: 12: 27Z

Tôi tin rằng những điều sau sẽ hoạt động:

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

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

File.readAsBytes / đối tượng được trả lại thực sự là một kiểu con File.readAsBytesSync . Từ đó, bạn có thể 0

2019-05-08 21: 40: 11Z
Uint8List
nguồn đặt đây