项目迭代开发手记--文件分割存储用例的实现过程(2)

2016-02-19 13:22 7 1 收藏

今天图老师小编要向大家分享个项目迭代开发手记--文件分割存储用例的实现过程(2)教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

项目迭代开发手记--文件分割存储用例的实现过程(2)   在第二天早上的开发中我们扩展了第一天迭代开发的用例,我们考虑增加了压缩流的功能,减少数据的存储负担。迭代2:用例:对向数据库提交的二进制流进行压缩;那么从数据库提取的时候要进行解压操作,以获得原始图档数据。通过查询资料我们找到Delphi的ZLib库支持对字节流的压缩和解压缩功能,这样我们只要使用该类的TCompressionStream和TDecompressionStream就可以实现压缩和解压缩功能,为了更好的封装这种过程方便项目组重用,我们对压缩和解压缩功能进行了封装。我们定义了TLoadBinaryDataToDB类来封装压缩和解压的功能,以便于使用。
  类定义了procedure LoadFile(fileFullName: string);来装载图档文件,同时压缩装载的流。
  procedure TLoadBinaryDataToDB.LoadFile(fileFullName: string);begin  FStream.LoadFromFile(fileFullName);  CompressStream; //对装载的流进行压缩end; procedure TLoadBinaryDataToDB.CompressStream;var  iSize: Integer;  lDestStream : TMemoryStream;  lCompressionStream : TCompressionStream;begin  lDestStream := TMemoryStream.Create;  lCompressionStream := TCompressionStream.Create(clMax,lDestStream);  try  iSize := FStream.Size;  //获得图像流的原始尺寸  FStream.SaveToStream(lCompressionStream); //将原始图像流进行压缩, //lDestStream中保存着压缩后的图像流  lCompressionStream.Free;  FStream.Clear;  FStream.WriteBuffer(iSize, SizeOf(iSize));   FStream.CopyFrom(lDestStream, 0);//写入经过压缩的图像流   finally    lDestStream.Free  end;end; 这样装载后的流就被压缩了,向数据库提交的流就是进过压缩过的。…LoadBinaryDataToDB.LoadFile(lFullFileName);  ClientDataSet1.Append;  ClientDataSet1.FieldByName('F_ID').Value := 2;  ClientDataSet1.FieldByName('F_NAME').Value := lFileFullName;  (ClientDataSet1.FieldByName('F_BINARY_DATA')
   as TBlobField).LoadFromStream(LoadBinaryDataToDB.FileStream);  ClientDataSet1.Post; 类还封装了另一个函数 procedure UnCompressStream(var stream :TMemoryStream)该函数实现了对压缩流的逆向解压过程。 procedure TLoadBinaryDataToDB.UnCompressStream(var stream :TMemoryStream);var  DecompressionStream: TDecompressionStream;  Buffer: PChar;  Count: Integer;begin  stream.ReadBuffer(Count, SizeOf(Count));  GetMem(Buffer, Count);    DecompressionStream := TDecompressionStream.Create(stream);  try    DecompressionStream.ReadBuffer(Buffer^, Count);//将被压缩的图像流解压缩,然后存入 Buffer内存块中    stream.Clear;    stream.WriteBuffer(Buffer^, Count); //将原始图像流保存至 stream流中      stream.Position := 0;  finally    FreeMem(Buffer); // 释放内存  end;end;  通过下面这样的调用我们就可以还原图档数据。(ClientDataSet1.FieldByName('F_BINARY_DATA')
   as TBlobField). SaveToStream(lBlobStream);LoadBinaryDataToDB.UnCompressStream(lBlobStream);//lBlobStream 为解压后的二进制字节流了对了类进行这样的封装很好的实现了压缩和解压代码的重用,开发人员只要创建该类的对象就可以对流进行相应的处理。到中午的时候我们完成了该类的实现,提交了一个可以使用的版本,由于对该项技术的不熟悉过程中我们还是走了不少弯路,查找了不少技术文档。

来源:http://www.tulaoshi.com/n/20160219/1604026.html

延伸阅读
标签: Web开发
ASP开发中存储过程应用详解|调用,参数,存储,数据库,输出,编译,mycomm,输入,userid,代码 ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过。我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那么回事。对于简单的应用,这些资料也许是有帮助的,但仅限于此,因为它们根本就是千篇...
    立项是软件开发的首要步骤,但常常被开发者轻视。立项主要目的是开发正确的产品,是软件开发成功的第一前提。“良好的开端是成功的一半”,那么错误的开端将是什么样的结局呢?结果可想而知了。我在立项过程中很多思想来源于林锐先生的“软件工程与项目管理解析”一书,在此向我的偶像表示敬意。 一、产品构思、立项调查与形...
标签: Web开发
     我不是一个很有经验的程序员,在做项目的过程中会遇到很多的问题,在数据库中使用分页就是我做项目中遇到的一个问题.我从网上查了很多资料,有很多种方法.但我觉的创建临时数据表是最简单的方法,在我做Membership扩展时发现原来微软也是这样用的,你可一随便打开一个Membership的存储过程看看.    &nbs...
    人们常问:“需求、设计、编程、测试四者究竟哪个重要?” 这个问题不好回答。四者都是软件开发过程中必不可少的环节,光做好其中一个环节并不能产生好的系统,但是做坏了其中任何一个环节,必定对系统产生坏的影响。若站在风险管理的角度讲,也许需求开发与管理是最重要的环节。因为需求是产品的根源,对产品需求的认识是...
    当立项建议经评审通过后,软件公司的机构领导接着会任命项目经理,由项目经理去筹备项目。财务部门、人力资源部门为新团队的组建提供必要的财力和人力资源。 作为以合作的形式开发共享软件,人力和财力的筹备就成为项目组织者一个人要操心的事了。粗略计算一下如果以聘用的形式组建开发团队,普通成员需3人,每人每月工资200...

经验教程

200

收藏

66
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部