Du setzt UTF-8 voraus,
Nein: Eine Low-Level-Serialisierung bzw. Bytesequenzen kennen gar keine Zeichenkodierung. Auch JSON ist nur eine Sequenz. Nun, die Grundlagen sind doch höchst interessant. In Fakt ist es nämlich gar nicht das Dateiformat, was die Datenstruktur abbildet, genau da irren sich so ziemlich Alle diejenigen die mit HTML zu tun haben. Entscheidend ist immer, wie das was aus HTML oder auch XML oder JSON gelesen wird, danach im Hauptspeicher liegt -- erst hier reden wir von einer Datenstruktur. So kann man einunddenselben Baum der sich aus den Daten einer XML oder HTML Datei ergibt, auch als CSV abspeichern und mit einem speziellen Algorithmus daraus das Original unzerknittert wiederherstellen.
Eine Solche ist oftmals baumartig und und kann entweder zyklisch, linear oder nichtlinear sein. Nichtlinear heißt auch geschachtelt (nested). Manche Algorithmen zum Serialisieren transformieren nichtlineare Datenstrukturen zunächst in einer lineare, also zyklische Struktur, weil sich zyklische Strukturen einfacher serialisieren lassen.
Wird eine zyklische Struktur serialisiert, hat man innerhalb der resultierenden Bytesequenz ebenfalls sich wiederholende zyklische Sequenzen, sog. Frames, Tupel oder Records. Innerhalb der Tupel gibt es dann den Feldbegriff ganz ähnlich wie in relationalen Datenbanken. Beispielsweise baucht man 3 Felder, wenn man die Daten eines threadbasierten Forums speichern will, egal ob in einer Datei oder in einer Tabelle gespeichert wird. So hat ein ganzer Thread z.B. mal angenommene 200 Records in einer 3 spaltigen Tabelle oder 200 Frames in einer Binärdatei. Wenn man diese Frames an der richtigen Stelle abschneidet, ist das Lesen dieser Datei kein Problem, genauso können Frames auch angehängt werden.
Nach diesem Prinzip funktioniert auch mp3, hier kann man problemlos auf Dateiebene, also direkt in der Sequenz operieren ohne daß man den gesamten Stream in den Hauptspeicher lesen muss (Schneiden von Audiodateien). Das einfachste Beispiel einer zyklischen und linearen Datenstruktur ist das Array. Auch ein Hash ist zyklisch und gerade wir Perler wissen ja, daß ein Hash auch nur ein Array ist. Man kann also einen Hash mit demselben Algorithmus in eine Datei schreiben wie ein Array. Allgemein gesagt kann man JEDE zyklische Datenstruktur in ein Array umwandeln. Und wenn man einen Algorithmus hat der nichtlineare Strukturen in lineare und zyklische Strukturen umwandelt, kann man jede beliebige Datenstruktur als Array in einer Datei speichern.
Hier bestätigt sich die Genialität des Niklaus Wirth. Seine Bücher gibt es noch. Ich habe hier "Algorithmen und Datenstrukturen mit Modula II" da steht im Prinzip dasselbe drin, was ich hier schrieb :)
Was Niklaus Wirth um 1980 festgestellt hat, ist alles Andere als Theorie. Insbesondere seit OOP die Welt der Softwareentwicklung erobert hat, ist es die Grundlage, nur die Begriffe sind neu. So reden wir vom Transport-Layer und meinen damit die Sequenz. Files sind nicht mehr Lochkarten sondern Dateien. Wir definieren Data Access Layer und meinen damit den wahlfreien Zugriff auf die Innereien komplexer Datenstrukturen. Wir bezeichnen komplexe Datenstrukturen als abstrakte Datentypen. Wir segnen abstrakte Datentypen mit dem Namen einer Klasse und reden dann von Objekten bzw. Instanzen dieser Klassen. Wir vermitteln zwischen abstrakten Datentypen und Dateien über spezielle Algorithmen die wir heute als Serializer bezeichnen. Wir nutzen Protokolle wie Memcache um den wahlfreien Zugriff systemübergreifend zu machen. Wir transportieren Dateien über FTP, HTTP usw. Wir bilden komplexe Datenstrukturen in JSON Sequenzen ab damit sie transportiert werden können. Außer JSON gibt es ungezählte weitere Serializer und Dateiformate. Bei all dem was wir da tun, bestätigt sich die Richtigkeit des Wirth'schen Dateibegriffes. Wir entwickeln weitere Schichtenmodelle weil unsere Anwendungen und Datenstrukturen immer komplexer werden. Wir arbeiten objektorientiert damit wir mit Veränderungen besser umgehen können.
Schöne Grüße 😉