Ce face Codec
Un Codec<S, T> are un encoder (din S în T) și un decoder (înapoi). utf8 este un Codec<String, List<int>>, base64 este Codec<List<int>, String>, iar json este Codec<Object?, String>.
a.fuse(b) creează un codec nou care aplică întâi a, apoi b la codificare (și în ordine inversă la decodare). De exemplu utf8.fuse(base64) transformă textul direct în Base64. Tipul de ieșire al primului trebuie să fie tipul de intrare al celui de-al doilea.
inverted returnează codec-ul cu rolurile schimbate: ce era decode devine encode. Poți scrie și propriile codec-uri, extinzând Codec și dând un encoder și un decoder.
Parametri
| Parametru | Descriere |
|---|---|
other |
La fuse: codec-ul aplicat după cel curent. |
Ce returnează
fuse: un codec combinat. inverted: codec-ul inversat.
Exemple
Exemplul 1: Text în Base64 dintr-un singur pas
import 'dart:convert';
void main() {
final text64 = utf8.fuse(base64);
final cod = text64.encode('Șoseaua Iași');
print(cod);
print(text64.decode(cod));
print(text64.inverted.encode(cod));
}
Rezultat
yJhvc2VhdWEgSWHImWk=
Șoseaua Iași
Șoseaua Iași
Exemplul 2: JSON în octeți și înapoi
json.fuse(utf8) transformă obiectul în octeți gata de scris într-un fișier sau trimis prin rețea.
import 'dart:convert';
void main() {
final jsonOcteti = json.fuse(utf8);
final octeti = jsonOcteti.encode({'oras': 'Brăila', 'cod': 810000});
print('${octeti.length} octeți');
print(jsonOcteti.decode(octeti));
}
Rezultat
31 octeți
{oras: Brăila, cod: 810000}
Exemplul 3: Un codec propriu: inversarea textului
import 'dart:convert';
class Inversor extends Converter<String, String> {
const Inversor();
@override
String convert(String input) => input.split('').reversed.join();
}
class CodecInvers extends Codec<String, String> {
const CodecInvers();
@override
Converter<String, String> get encoder => const Inversor();
@override
Converter<String, String> get decoder => const Inversor();
}
void main() {
const c = CodecInvers();
final secret = c.encode('Constanța');
print(secret);
print(c.decode(secret));
print(c.fuse(utf8).encode('Ana'));
}
Rezultat
ațnatsnoC
Constanța
[97, 110, 65]
Greșeli frecvente
- Legi codec-uri ale căror tipuri nu se potrivesc:
utf8.fuse(utf8)nu compilează, pentru că primul produceList<int>, iar al doilea primeșteString. Ieșirea primului trebuie să fie intrarea celui de-al doilea, ca lautf8.fuse(base64).
Comenzi înrudite
utf8: Codec-ul UTF-8: encode transformă textul în octeți, decode transformă octeții înapoi în text.base64Encode: base64Encode transformă octeți în text Base64; base64Decode face invers, din text Base64 în octeți.JsonEncoder.withIndent: Un convertor reutilizabil spre JSON; varianta withIndent scrie JSON frumos, pe mai multe rânduri, cu indentare.