`
znhyz1
  • 浏览: 158895 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

DataSnap Stream 传递大数据

 
阅读更多

        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

    标题 "DataSnap操作SQL" 涉及到的是Delphi中的一个强大功能,DataSnap,它允许开发者构建分布式应用程序,并且高效地处理SQL数据库。DataSnap是Embarcadero Delphi的一个组件,提供了服务器端的数据访问框架,可以...

    Datasnap 使用JSON 传递数据的简易方法.mht

    Datasnap 使用JSON 传递数据的简易方法.mht

    C++Builder DataSnap程序

    在"C++Builder DataSnap程序"中,`cb2010_DataSnap_demo`是一个示例项目,展示了如何在C++Builder 2010环境下,从服务端的Access数据库读取数据并传递到客户端。Access数据库是一种关系型数据库管理系统,通常用于...

    DataSnap通过json上传clientdataset数据集到服务端并解释

    理解并掌握这个过程对于开发基于DataSnap的分布式应用至关重要,特别是需要高效、安全地传递大量结构化数据时。同时,熟悉JSON的编码和解码机制也是必要的,因为它是现代网络通信中常见的数据交换格式。

    DataSnap综合演示程序

    《DataSnap综合演示程序详解》 DataSnap是Embarcadero Delphi开发环境中的一种强大的远程数据访问技术,它提供了一种高效、灵活的方式,用于构建分布式应用程序。在本篇文章中,我们将深入探讨“DataSnap Demo”这...

    Delphi DataSnap加密压缩组件

    在Delphi编程环境中,DataSnap是一项强大的技术,它允许开发者构建分布式应用程序,提供服务化架构,使得客户端可以远程调用服务器端的业务逻辑。而"Delphi DataSnap加密压缩组件",即DSFC,是为了增强DataSnap应用...

    delphi Datasnap 上传和下载源码

    - **功能说明**:此过程用于触发文件上传事件,获取本地文件路径,并通过流的方式传递给服务器端进行保存。 #### 总结 通过上述分析,我们可以清晰地了解到Delphi Datasnap中文件上传与下载的具体实现方式。利用...

    Delphi XE7开发入门教程之DataSnap三层架构篇

    3. **数据访问层**:DataSnap服务器可以直接连接到各种数据库,如SQL Server、Oracle或Interbase,使用TClientDataSet或TDataset子类在业务逻辑层和数据库之间传递数据。 4. **连接管理**:DataSnap支持多种协议,...

    DataSnap通过自定义sql查询数据

    在IT领域,DataSnap是一种由Embarcadero Technologies开发的远程数据访问技术,主要用于构建分布式应用程序。本主题将深入探讨如何在DataSnap框架下通过自定义SQL查询来获取数据,以便更好地理解和应用这一功能。 ...

    Delphi 10.1 Berlin DataSnap 开发手册 李维

    3. **数据传输对象(DTOs)**:DataSnap使用DTOs来封装数据,这些对象可以在服务器和客户端之间传递。手册会指导如何创建和使用DTOs,以及如何处理序列化和反序列化。 4. **安全性和身份验证**:DataSnap支持多种...

    datasnap 白皮书 测试源码

    《datasnap 白皮书 测试源码》是关于Datasnap技术的一份详细文档,其中包含了作者自己编写的源代码示例。Datasnap是Delphi和C++Builder开发环境中的一种高级服务框架,它允许开发者创建分布式应用程序,实现数据的...

    Xe2DataSnap回调基本方法总结

    在Delphi中,Xe2DataSnap回调机制是一种强大的特性,允许服务器主动调用客户端的方法,从而实现双向通信。以下是对Xe2DataSnap回调基本方法的详细解释: 1. **TSQLConnection与TDSClientCallbackChannelManager组件...

    delphi xe10.1的datasnap 三层结构完整客户端 (可用)

    Delphi XE10.1中的DataSnap是一个强大的框架,用于构建分布式应用程序,特别是采用三层架构的系统。三层架构是一种常见的软件设计模式,它将应用分为三个主要部分:表示层、业务逻辑层和数据访问层,以实现更好的可...

    datasnap2010 中文白皮书

    《datasnap2010 中文白皮书》是一份详细介绍Datasnap技术在Delphi 2010版本中应用的文档。Datasnap是Embarcadero Technologies开发的一个组件,它为开发人员提供了构建分布式应用程序的强大工具,特别是那些需要进行...

    datasnap服务端显示客户端信息并控制其连接的例子

    【标题】"datasnap服务端显示客户端信息并控制其连接的例子"主要展示了如何在Delphi的DataSnap框架下实现服务器端对客户端连接的管理和信息显示功能。DataSnap是Embarcadero Delphi开发环境中用于创建分布式应用程序...

    DataSnap与FireDAC三层

    《DataSnap与FireDAC在三层架构中的应用详解》 在IT行业中,开发高效、稳定且易于维护的应用系统是一项挑战。Delphi作为一款强大的Windows应用程序开发工具,提供了多种技术和框架来帮助开发者实现这一目标。其中,...

    Delphi2010 DataSnap白皮书

    《Delphi2010 DataSnap白皮书》是一份重要的技术文档,主要针对使用Delphi 2010开发数据库管理系统的开发者。DataSnap是Embarcadero Technologies开发的一个功能强大的组件,它允许开发者创建分布式应用程序,实现...

    Delphi xe10 DataSnap源码

    当需要在服务器和客户端之间传递数据库数据时,TDataSetProvider扮演关键角色。它允许直接从服务器的数据库表提供数据到客户端,或者反之。源码中会包含如何设置数据集提供者,以及如何在客户端使用这些数据。 6. ...

    Rest Severs in Delphi XE Using DataSnap

    在Delphi XE中利用DataSnap构建REST服务器是一项强大的技术,可以帮助开发者创建高效、可扩展的Web服务。本文将深入探讨这一主题,介绍REST(Representational State Transfer)架构原理,以及如何在Delphi环境中...

    DataSnap例子

    DataSnap是Embarcadero Technologies开发的一个强大的框架,主要用于构建分布式应用程序。这个框架允许开发者创建服务器端服务,并通过网络向客户端提供这些服务。在“DataSnap例子”中,我们有两个关键部分:...

Global site tag (gtag.js) - Google Analytics