Und was für Exceptions?
Versuch es mal probehalber so
Delphi-Quellcode:
procedure WriteString(Stream: TStream; const str: String); inline;
var
len: Integer;
Bytes: TBytes;
begin
Bytes := TEncoding.UTF8.GetBytes(str);
len := length(Bytes);
Stream.Write(len, sizeof(len));
if len > 0 then
Stream.WriteBuffer(Bytes, len);
end;
function ReadString(Stream: TStream): String; inline;
var
len: Integer;
Bytes: TBytes;
begin
Stream.Read(len, sizeof(len));
SetLength(Bytes, len);
if len > 0 then
Stream.ReadBuffer(Bytes, len);
Result := TEncoding.UTF8.GetString(Bytes {, 0, Length(Bytes)});
else
Result := '';
end;
Wenn du von Read und Write das Result nicht auswertest, dann besser die Buffer-Varianten verwenden, denn die Prüfen wenigstens, ob wirklich alles gelesen oder geschrieben wurde.
Und die Read/Write-Methoden mit TBytes dereferenzieren das Array auch dann, wenn es leer ist ... könnte sein, dass es da Problemchen gibt.