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操作SQL" 涉及到的是Delphi中的一个强大功能,DataSnap,它允许开发者构建分布式应用程序,并且高效地处理SQL数据库。DataSnap是Embarcadero Delphi的一个组件,提供了服务器端的数据访问框架,可以...
Datasnap 使用JSON 传递数据的简易方法.mht
在"C++Builder DataSnap程序"中,`cb2010_DataSnap_demo`是一个示例项目,展示了如何在C++Builder 2010环境下,从服务端的Access数据库读取数据并传递到客户端。Access数据库是一种关系型数据库管理系统,通常用于...
理解并掌握这个过程对于开发基于DataSnap的分布式应用至关重要,特别是需要高效、安全地传递大量结构化数据时。同时,熟悉JSON的编码和解码机制也是必要的,因为它是现代网络通信中常见的数据交换格式。
《DataSnap综合演示程序详解》 DataSnap是Embarcadero Delphi开发环境中的一种强大的远程数据访问技术,它提供了一种高效、灵活的方式,用于构建分布式应用程序。在本篇文章中,我们将深入探讨“DataSnap Demo”这...
在Delphi编程环境中,DataSnap是一项强大的技术,它允许开发者构建分布式应用程序,提供服务化架构,使得客户端可以远程调用服务器端的业务逻辑。而"Delphi DataSnap加密压缩组件",即DSFC,是为了增强DataSnap应用...
3. **数据访问层**:DataSnap服务器可以直接连接到各种数据库,如SQL Server、Oracle或Interbase,使用TClientDataSet或TDataset子类在业务逻辑层和数据库之间传递数据。 4. **连接管理**:DataSnap支持多种协议,...
在IT领域,DataSnap是一种由Embarcadero Technologies开发的远程数据访问技术,主要用于构建分布式应用程序。本主题将深入探讨如何在DataSnap框架下通过自定义SQL查询来获取数据,以便更好地理解和应用这一功能。 ...
3. **数据传输对象(DTOs)**:DataSnap使用DTOs来封装数据,这些对象可以在服务器和客户端之间传递。手册会指导如何创建和使用DTOs,以及如何处理序列化和反序列化。 4. **安全性和身份验证**:DataSnap支持多种...
在Delphi中,Xe2DataSnap回调机制是一种强大的特性,允许服务器主动调用客户端的方法,从而实现双向通信。以下是对Xe2DataSnap回调基本方法的详细解释: 1. **TSQLConnection与TDSClientCallbackChannelManager组件...
《datasnap 白皮书 测试源码》是关于Datasnap技术的一份详细文档,其中包含了作者自己编写的源代码示例。Datasnap是Delphi和C++Builder开发环境中的一种高级服务框架,它允许开发者创建分布式应用程序,实现数据的...
Delphi XE10.1中的DataSnap是一个强大的框架,用于构建分布式应用程序,特别是采用三层架构的系统。三层架构是一种常见的软件设计模式,它将应用分为三个主要部分:表示层、业务逻辑层和数据访问层,以实现更好的可...
《datasnap2010 中文白皮书》是一份详细介绍Datasnap技术在Delphi 2010版本中应用的文档。Datasnap是Embarcadero Technologies开发的一个组件,它为开发人员提供了构建分布式应用程序的强大工具,特别是那些需要进行...
【标题】"datasnap服务端显示客户端信息并控制其连接的例子"主要展示了如何在Delphi的DataSnap框架下实现服务器端对客户端连接的管理和信息显示功能。DataSnap是Embarcadero Delphi开发环境中用于创建分布式应用程序...
《DataSnap与FireDAC在三层架构中的应用详解》 在IT行业中,开发高效、稳定且易于维护的应用系统是一项挑战。Delphi作为一款强大的Windows应用程序开发工具,提供了多种技术和框架来帮助开发者实现这一目标。其中,...
《Delphi2010 DataSnap白皮书》是一份重要的技术文档,主要针对使用Delphi 2010开发数据库管理系统的开发者。DataSnap是Embarcadero Technologies开发的一个功能强大的组件,它允许开发者创建分布式应用程序,实现...
当需要在服务器和客户端之间传递数据库数据时,TDataSetProvider扮演关键角色。它允许直接从服务器的数据库表提供数据到客户端,或者反之。源码中会包含如何设置数据集提供者,以及如何在客户端使用这些数据。 6. ...
在Delphi XE中利用DataSnap构建REST服务器是一项强大的技术,可以帮助开发者创建高效、可扩展的Web服务。本文将深入探讨这一主题,介绍REST(Representational State Transfer)架构原理,以及如何在Delphi环境中...
DataSnap是Embarcadero Technologies开发的一个强大的框架,主要用于构建分布式应用程序。这个框架允许开发者创建服务器端服务,并通过网络向客户端提供这些服务。在“DataSnap例子”中,我们有两个关键部分:...
DataSnap是Delphi中的一个核心组件,用于构建分布式应用程序,允许开发者创建服务器端的数据服务,并通过网络进行调用。 **DataSnap开发简介** DataSnap是一种基于组件的技术,它简化了客户端和服务器之间的数据...