场景
ICSharpCode.SharpZipLib.dll 下载:
https://download.csdn.net/download/badao_liumang_qizhi/11586902
实现
新建Winform窗体程序。
打开资源管理器-引用-右键-添加--浏览
选择刚才上面下载的ICSharpCode.SharpZipLib.dll,点击确定。
右击项目-添加-类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProtoBufTest
{
[Serializable]
class Person
{
public Person(int id ,string password) {
this.Id = id;
this.Password = password;
}
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
private string password;
public string Password
{
get { return password; }
set { password = value; }
}
}
}
在窗体上拖拽一个Button按钮,然后双击进其点击事件。
private void button7_Click(object sender, EventArgs e)
{
DateTime begin = DateTime.Now;
Console.WriteLine("二进制压缩开始" + begin.ToString("yyyy-MM-dd HH:mm:ss"));
//初始化数据
for (int i = 0; i < 10000; i++)
{
personList.Add(new Person(i,"密码"+i));
}
try
{
//创建内存流对象
MemoryStream ms = new MemoryStream();
//序列化对象
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, this.personList);
//把内存流对象写入字节数组
byte[] buffer = ms.ToArray();
//关闭内存流对象
ms.Close();
//释放资源
ms.Dispose();
FileStream fs = File.Create(@"E:\testdata1\Record3.zip");//创建文件
//创建zip输出流
ZipOutputStream zipOutputStream = new ZipOutputStream(fs, buffer.Length);
//ZipEntry用于表示Zip文件条目 --将会在压缩文件中创建Record3.data文件
ZipEntry entry = new ZipEntry("Record3.data");
//将其放进压缩文件中
zipOutputStream.PutNextEntry(entry);
//将字节数组写入文件
zipOutputStream.Write(buffer, 0, buffer.Length);
zipOutputStream.Finish();
zipOutputStream.Close();
zipOutputStream.Dispose();
//关闭流
fs.Close();
//释放对象
fs.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
DateTime end = DateTime.Now;
TimeSpan ts = end - begin;
Console.WriteLine("二进制压缩结束" + end.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine("共花费 " + ts.TotalSeconds);
}
具体使用见注释。
运行效果
将其解压