Ich dachte TStream.WriteData(S) und TStream.ReadData(S) sollten vom Compiler (inzwischen) generisch aufgelöst werden?
...
Ich dachte Umwege über Buffergröße usw. sollten nicht mehr nötig sein?
Ein String hat nun mal eine variable Länge und die muss irgendwie bekannt sein. Das geht entweder in dem man immer einen festen Wert verwendet, der dann beim Lesen bekannt ist, oder man schreibt den Wert mit in den String - in der Regel vor den Zeichen. Das ist aber eine Konvention und die kann nicht generisch gelöst werden, da es keinen intrinsischen Ansatz wie bei den fixen Datentypen dafür gibt.