File.readAsBytes în Dart

readAsBytes citește un fișier ca octeți (imagini, arhive, orice fișier binar); writeAsBytes scrie octeți.

Sintaxă
Future<Uint8List> readAsBytes()
Future<File> writeAsBytes(List<int> bytes, {FileMode mode = FileMode.write, bool flush = false})

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ști FileSystemException (octeții nu sunt UTF-8) sau text fără sens. Fișierele binare se citesc cu readAsBytes.
  • Scrii în writeAsBytes valori peste 255: se păstrează doar ultimii 8 biți (256 devine 0).

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.