delphi DataSnap Stream 传递大数据
2014-11-25 00:00
267 查看
摘要: delphi DataSnap Stream 传递大数据
delphi DataSnap Stream 传递大数据
DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的。但是很多人发现好像大小稍微大点就工作不正常了。
DataSnap默认的缓存大小是32k 所以如果流的大小超过这个大小就会被自动分成多个包,这就是传递大量数据的基础,如果一次性发送就可能受到内存的限制。
当传递大量数据时获取到的大小是-1,所以如果还是按照一般的方法来读取流的数据就会有问题了。
由于流的数据是原始数据包发送,所以在不对数据包压缩加密的情况下,传递速度是和其它方式没有多大区别的。
// FS是一个文件流
function TMyDSServer.PutFile(Stream: TStream): Boolean;
const
BufSize = $F000;
var
Buffer: TBytes;
ReadCount: Integer;
begin
if Stream.Size = -1 then // 大小未知则一直读取到没有数据为止
begin
SetLength(Buffer, BufSize);
repeat
ReadCount := Stream.Read(Buffer[0], BufSize);
if ReadCount > 0 then
FS.WriteBuffer(Buffer[0], ReadCount);
if ReadCount < BufSize then
break;
until ReadCount < BufSize;
end
else // 大小已知则直接复制数据
FS.CopyFrom(Stream, 0);
Result := True;
end;
delphi DataSnap Stream 传递大数据
DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的。但是很多人发现好像大小稍微大点就工作不正常了。
DataSnap默认的缓存大小是32k 所以如果流的大小超过这个大小就会被自动分成多个包,这就是传递大量数据的基础,如果一次性发送就可能受到内存的限制。
当传递大量数据时获取到的大小是-1,所以如果还是按照一般的方法来读取流的数据就会有问题了。
由于流的数据是原始数据包发送,所以在不对数据包压缩加密的情况下,传递速度是和其它方式没有多大区别的。
// FS是一个文件流
function TMyDSServer.PutFile(Stream: TStream): Boolean;
const
BufSize = $F000;
var
Buffer: TBytes;
ReadCount: Integer;
begin
if Stream.Size = -1 then // 大小未知则一直读取到没有数据为止
begin
SetLength(Buffer, BufSize);
repeat
ReadCount := Stream.Read(Buffer[0], BufSize);
if ReadCount > 0 then
FS.WriteBuffer(Buffer[0], ReadCount);
if ReadCount < BufSize then
break;
until ReadCount < BufSize;
end
else // 大小已知则直接复制数据
FS.CopyFrom(Stream, 0);
Result := True;
end;
相关文章推荐
- DataSnap Stream 传递大数据
- DataSnap 用TStream 传递大数据 返回流大小为-1的情况
- 多层数据库应用基于Delphi DataSnap方法调用的实现(二)更新数据集
- Delphi Xe DataSnap Rest + Flex 开发 基本探索4(返回字节流 stream)
- 视频:连接 Android应用和DataSnap服务-巴西 2010 Delphi 大会
- delphi datasnap 心跳包
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- 【转载】用Delphi实现程序间的数据传递
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi与Flash之间的数据传递
- Delphi与Flash之间的数据传递
- 让Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- Delphi的DataSnap发挥最大效率
- 让Delphi的DataSnap发挥最大效率
- Delphi ActiveX Form的使用---传递Clientdataset的数据
- 传递和返回数据到一个Delphi编写的UDF
- 传递和返回数据到一个Delphi编写的UDF