转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
项目迭代开发手记--文件分割存储用例的实现过程(3)         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1561 更新时间:2009/4/23 18:28:29

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

      

上午的迭代2完成后,我们获得了一个有完整压缩流功能的实现代码,这次迭代完成的代码是可用的,我们在迭代2中完成了我们既定的任务。在下午的小组讨论中,我们继续考虑下一阶段的迭代目标,由于没有决定图档文件的格式,我们决定先不考虑图片格式的问题,先实现文件的分割功能。文件的分割主要是考虑当图档文件太大的时,数据库提交性能会变得非常慢,分割的目的就是改进提交的性能。

迭代3:

对向数据库提交的二进制流进行分割压缩;那么从数据库提取的时候要进行解压和拼接操作,以获得原始图档数据。

在分割功能的设计和编码前,我们重新审视了上午的代码——那个压缩类TLoadBinaryDataToDB,发觉该类似乎职责太多,它要负责把文件装载成流,然后才对流进行压缩和解压缩,我们发现UnCompressStream函数有更好的通用性,只要是压缩的流就可以对其进行解压。而压缩功能在这个类里似乎只能对通过文件装载的流进行压缩,如果流是以另一种形式获得的,不是以文件装载的形式,那么我们不知道该如何对该流进行压缩。这里似乎违背了功能单一的职责,类既负责了流的装载,又负责流的压缩;于是我们对该类进行了重构已获得结构更好的的类,以增加类的重用性。



重构后的类只有两个公用的方法 CompressStream 和 UnCompressStream 它们都已流为参数,通过对传入流的处理来实现压缩和解压缩功能。

 

procedure TCompressStream.CompressStream(var stream: TMemoryStream);

var

  iSize: Integer;

  lDestStream: TMemoryStream;

  lCompressionStream: TCompressionStream;

begin

  lDestStream := TMemoryStream.Create;

  lCompressionStream := TCompressionStream.Create(clMax, lDestStream);

  try

    iSize := stream.Size; //获得图像流的原始尺寸

stream.SaveToStream(lCompressionStream); //将原始图像流进行压缩,

// lDestStream中保存着压缩后的图像流

    lCompressionStream.Free;

    stream.Clear;

    stream.WriteBuffer(iSize, SizeOf(iSize)); //写入原始图像的尺寸

    stream.CopyFrom(lDestStream, 0); //写入经过压缩的图像流

  finally

    lDestStream.Free

  end;

end;

 

解压缩函数

procedure TCompressStream.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;

经过重构后,类TCompressStream无疑提高了重用性,同时有更好的结构。除去了把文件装载成流的功能后,TCompressStream职责变得更单一了。它对已任何形式获得得的流都可以进行压缩和解压缩。完成TLoadBinaryDataToDB重构我们开始考虑对流进行分割功能的实现。

在假定一个流被分割成5份,那么拼接时就要有一个顺序我们考虑在数据库增加一个顺序的字段来保存流各个块之间的分割顺序。

字段名

字段类型

字段长度

字段说明

 

FID

Number

 

主键

 

F_NAME

VarChar2

50

文件名称

 

F_SERIAL

Number

 

文件分割顺序号

 

F_BINARY_DATA

Long Row

[1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台