You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi 7中将分段数据存储到单个变量中?

实现客户端累积接收Base64字符串到单个变量

要把多次接收的Base64数据片段整合到一个变量中,只需通过类成员变量持久化存储累加结果,再在每次收到数据时将片段追加进去即可,具体实现如下:

步骤1:添加类成员变量

在TFrmClient类的private区域,新增一个用于存储完整Base64数据的字符串变量:

type
  TFrmClient = class(TForm)
    ClientSocket: TClientSocket;
    ClientBasefile: TMemo;
    // ... 其他已声明的组件
    procedure ClientSocketRead(Sender: TObject; Stream: TStream);
  private
    FReceivedBase64: string; // 用于累积所有Base64片段的变量
  public
    // ... 公共方法/属性
  end;

步骤2:修改Socket读取事件逻辑

修改ClientSocketRead方法,将每次接收的Base64片段追加到FReceivedBase64变量中(如果需要保留每段数据的日志,仍可以继续往Memo里添加):

procedure TFrmClient.ClientSocketRead(Sender: TObject; Stream: TStream);
var
  zb_St: String;
begin
  Log(Sender, 'Data received from socket');
  with Stream as TMemoryStream do
  begin
    SetLength(zb_St, Size);
    Read(zb_St[1], Size);
  end;
  if Sender = ClientSocket then
  begin
    // 将新接收的片段追加到累积变量
    FReceivedBase64 := FReceivedBase64 + zb_St;
    // 可选:保留每段数据的日志记录
    ClientBasefile.Lines.Add(zb_St);
  end;
end;

后续使用示例

当需要完整的Base64字符串时,直接调用FReceivedBase64变量即可,比如保存到文件:

procedure TFrmClient.btnSaveFullDataClick(Sender: TObject);
begin
  if FReceivedBase64 <> '' then
    TFile.WriteAllText('complete_base64.txt', FReceivedBase64);
end;

优化提示

如果接收的Base64数据量极大,建议用TStringBuilder替代字符串拼接,提升性能:

  1. 替换类成员变量:
private
  FReceivedBase64: TStringBuilder;
  1. 在窗体创建/销毁时初始化/释放:
procedure TFrmClient.FormCreate(Sender: TObject);
begin
  FReceivedBase64 := TStringBuilder.Create;
end;

procedure TFrmClient.FormDestroy(Sender: TObject);
begin
  FReceivedBase64.Free;
end;
  1. 接收时追加数据:
FReceivedBase64.Append(zb_St);
  1. 获取完整字符串:
var FullBase64 := FReceivedBase64.ToString;

内容的提问来源于stack exchange,提问作者Syed ZBK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:18:21