DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的。但是很多人发现好像大小稍微大点就工作不正常了,就变相使用其它类型转换来转换去,这样便利性就失去了。
官方有篇博客很详细的介绍了stream的使用,英文好的可以去看下DataSnap Server Method Stream Parameters
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 的资料很少,初学者不错的资料
Datasnap 使用JSON 传递数据的简易方法.mht
DataSnap通过json上传数据集到服务端并解释
cb2010_DataSnap_demo 从服务端的 access数据库读取数据到客户端,在C++Building2010下编译通过
DataSnap Demo:TFDConnection、最大连接数、客户端回叫功能、多线程模拟、压力测试等,编译环境XE6 Update 1
datasnap2010 中文白皮书 datasnap2010 中文白皮书 datasnap2010 中文白皮书
DataSnap REST C++PDF版 DataSnap REST 使用方法教程
Embarcadero公司刚刚出版了我新的基于一个小的现实世界的DataSnap应用程序的DataSnap开发白皮书, 几乎涵盖所有你能想象你在RAD Studio XE中 学习有关DataSnap多层应用程序开发的的内容:从简单 的服务器安全连接...
DELPHI DataSnap 实例
datasnap 白皮书 测试源码,自己编写的书的源码
Delphi XE7开发入门教程之DataSnap三层架构篇 主要是delphi 开发datasnap的案列 以前积分太多了,现在降下来 5个积分
DataSnap客户端和服务端
delphi 2010 datasnap 聊天室源代码,来自易博龙网站
Delphi2010 DataSnap白皮书(翻译参考书)
Delphi xe10 DataSnap 源码, Delphi xe10 DataSnap源码
Delphi XE2 DataSnap Development Essentials
用Delphi2010的DATASNAP开发三层数据库应用源码。
DataSnap通过自定义sql查询数据
delphi Datasnap 上传和下载源码
一个用delphi写的服务器端DataSnap程序小例子,演示了DataSnap访问数据库的服务器端应用。