datasnap远程方法返回stream的客户端处理

datasnap远程方法返回stream的客户端处理

复制代码
function CopyStream(const AStream: TStream): TMemoryStream;
const
  LBufSize = $F000;  //60k
var
  LBuffer: TBytes;
  LReadLen: integer;
begin
  Result := nil;
  if AStream = nil then
    Exit;
  Result := TMemoryStream.Create;
  try
    if AStream.Size = -1 then
    begin
      SetLength(LBuffer, LBufSize);
      repeat
        LReadLen := AStream.Read(LBuffer[0], LBufSize);
        if LReadLen > 0 then
          Result.WriteBuffer(LBuffer[0], LReadLen);
        if LReadLen < LBufSize then
          break;
      until LReadLen < LBufSize;
    end
    else
      Result.CopyFrom(AStream, 0);
    Result.Position := 0;
  except
    Result.Free;
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  con1.Connected:=True;
  var c:TServerMethods1Client:=TServerMethods1Client.Create(con1.DBXConnection);
  var m: TStream := c.echo('1');
  var m2: TMemoryStream := CopyStream(m);
  var s:TSerial:= TSerial.Create;
  s.decodeFromStream(m2);
  var i:Integer := (s.force('i').AsInteger);
  mmo1.Lines.Add(i.ToString);
  mmo1.Lines.Add(s.force('s').Asutf8String);
  c.Free;
end;
复制代码

 

posted @   delphi中间件  阅读(446)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-03-08 监控linux服务器
2021-03-08 unigui改服务标题
2017-03-08 cxgrid的FINDPANEL编程
点击右上角即可分享
微信分享提示