du bist auch wenn #0 vorkommt faktisch am Ende des Streams .... es wird nur nicht mehr dargestellt
Delphi-Quellcode:
var
ms:TStringStream;
procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
begin
s := '连接测试'+ #13#10 +'Test'+#0;
ms.WriteString(s);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ms.Position := 0;
ListBox1.Items.LoadFromStream(ms,TEncoding.Unicode);
Caption := IntToStr(ms.Position) + ' - ' + IntToStr(ms.Size)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ms := TStringStream.Create('',TEncoding.Unicode);
end;
Mir ist noch nicht ganz klar was genau Du vorhast, ich würde das was ich verstanden habe über eine Klasse mit einer Liste von Streams abfackeln, was hier für welche Ausgabe gebraucht wird lässt sich iontern gegf. über zusammenkopieren in neue Streams abfackeln.
Der Ansatz von Jaenicke könnte für Dich passen, auch Dein Ansatz mit Längenspeicherung innerhalb des Streams ist brauchbar, allerdings würde ich den von Komponenten zu ladenden Stream vorher in einen neues Extrahieren.