当前位置: 首页 > news >正文

流的压缩与解压缩函数

uses Zlib;

//压缩函数
procedure Zip(var fs: TMemoryStream);
var
  cs: TCompressionStream;
  ms: TMemoryStream;
  num: Integer;
begin
  if not(Assigned(fs) and (fs.Size>0)) then Exit;

    num := fs.Size;
    ms := TMemoryStream.Create;
    cs := TCompressionStream.Create(clMax, ms);
  try
    fs.SaveToStream(cs);
    cs.Free;
    //ms.Position := 0;
    fs.Clear;
    fs.WriteBuffer(num, sizeof(num));
    fs.CopyFrom(ms, 0);
  finally
    ms.Free;
  end;
end;

//解压函数
procedure UnZip(var fs: Tmemorystream);
var
  ds: TDecompressionStream;
  ms: TMemoryStream;
  num: Integer;
begin
  if not(Assigned(fs) and (fs.Size>0)) then Exit;

  fs.Position := 0;
  fs.ReadBuffer(num,sizeof(num));
  ms := TMemoryStream.Create;
  ds := TDecompressionStream.Create(fs);
  try
    ms.SetSize(num);
    ds.Read(ms.Memory^, num);
    //ms.Position := 0;
    fs.Clear;
    fs.CopyFrom(ms, 0);
  finally
    ds.Free;
    ms.Free;
  end;
end;


//压缩测试
procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile('c:/temp/test.txt');
  Zip(ms);
  ms.SaveToFile('c:/temp/test.zipx');
end;

//解压测试
procedure TForm1.Button2Click(Sender: TObject);
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile('c:/temp/test.zipx');
  UnZip(ms);
  ms.SaveToFile('c:/temp/test2.txt');
end;

相关文章:

  • Javascript 严格模式详解(转)
  • AngularJS的Hello World
  • 日志池
  • 电子病历,到底是用BS还是CS
  • Visual Studio (VSIX,项目模板 )制作
  • C#下实现的半角转与全角的互转
  • shell训练营Day19
  • 创建使用口令的角色,并分配给用户
  • 当Json数据中的key为Java关键字时,在定义实体类的时候不能对该字段进行声明,所以需要对字段进行特殊处理...
  • day16:计算文档中数字|检测两个文件的不同|检测网卡流量|批量杀死sh|检测是否开启80和是什么服务...
  • ruby多线程理解
  • 面试系列-高并发之synchronized
  • 解决fastJson无序问题
  • Filling Your Toolbox (a.k.a. Essential Tools List)
  • sed写的命令收集
  • 【Leetcode】104. 二叉树的最大深度
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 230. Kth Smallest Element in a BST
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript 奇技淫巧
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Java深入 - 深入理解Java集合
  • Promise面试题,控制异步流程
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • VuePress 静态网站生成
  • 解决iview多表头动态更改列元素发生的错误
  • 每天10道Java面试题,跟我走,offer有!
  • 区块链分支循环
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微服务入门【系列视频课程】
  • 异常机制详解
  • 因为阿里,他们成了“杭漂”
  • 主流的CSS水平和垂直居中技术大全
  • #define
  • #define用法
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (12)Linux 常见的三种进程状态
  • (bean配置类的注解开发)学习Spring的第十三天
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (补)B+树一些思想
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (黑马C++)L06 重载与继承
  • (论文阅读11/100)Fast R-CNN
  • (一)SpringBoot3---尚硅谷总结
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .net CHARTING图表控件下载地址
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net web项目 调用webService
  • .Net 高效开发之不可错过的实用工具
  • .NET 解决重复提交问题
  • .NET下的多线程编程—1-线程机制概述
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • /dev/sda2 is mounted; will not make a filesystem here!