Ce face File.readAsBytes
Nu toate fișierele sunt text. Imaginile, PDF-urile și arhivele se citesc ca octeți: readAsBytes() returnează un Future<Uint8List>, adică o listă de numere între 0 și 255. writeAsBytes(octeti) scrie o listă de octeți, cu aceleași opțiuni ca writeAsString (mode, flush).
Există și variantele sincrone readAsBytesSync și writeAsBytesSync. Octeții pot fi transformați în text cu utf8.decode sau în Base64 cu base64Encode.
Parametri
| Parametru | Descriere |
|---|---|
bytes |
La writeAsBytes: octeții de scris (valori 0–255). |
mode, flush |
Ca la writeAsString. |
Ce returnează
readAsBytes: Future<Uint8List>. writeAsBytes: Future<File>.
Exemple
Exemplul 1: Octeții unui fișier text
Litera ș ocupă doi octeți în UTF-8.
import 'dart:convert';
import 'dart:io';
Future<void> main() async {
await File('oras.txt').writeAsString('Iași');
final octeti = await File('oras.txt').readAsBytes();
print(octeti);
print('${octeti.length} octeți');
print(utf8.decode(octeti));
}
Rezultat
[73, 97, 200, 153, 105]
5 octeți
Iași
Exemplul 2: Recunoașterea unei imagini PNG după primii octeți
Fișierele PNG încep mereu cu octeții 137 80 78 71 (‰PNG). Scriem un fișier fals cu acest început și îl verificăm.
import 'dart:io';
Future<void> main() async {
await File('poza.png').writeAsBytes([137, 80, 78, 71, 13, 10, 26, 10, 0, 0]);
await File('text.png').writeAsBytes('nu sunt imagine'.codeUnits);
for (final nume in ['poza.png', 'text.png']) {
final b = await File(nume).readAsBytes();
final estePng = b.length >= 4 && b[0] == 137 && b[1] == 80 && b[2] == 78 && b[3] == 71;
print('$nume: ${estePng ? 'PNG adevărat' : 'nu este PNG'}');
}
}
Rezultat
poza.png: PNG adevărat
text.png: nu este PNG
Greșeli frecvente
- Citești o imagine cu
readAsString: primeștiFileSystemException(octeții nu sunt UTF-8) sau text fără sens. Fișierele binare se citesc cureadAsBytes. - Scrii în
writeAsBytesvalori peste 255: se păstrează doar ultimii 8 biți (256devine0).
Comenzi înrudite
File.readAsString: Citește tot conținutul unui fișier text într-un String (implicit UTF-8); varianta Sync blochează până termină.base64Encode: base64Encode transformă octeți în text Base64; base64Decode face invers, din text Base64 în octeți.utf8: Codec-ul UTF-8: encode transformă textul în octeți, decode transformă octeții înapoi în text.File.copy: copy face o copie a fișierului la altă cale; rename îl mută sau îl redenumește. Ambele returnează noul File.