var fileName = Path.Combine(_cachePath, Path.GetRandomFileName());
while (File.Exists(fileName))
{
fileName = Path.Combine(_cachePath, Path.GetRandomFileName());
} //这一段代码是获取不重复的文件名
using var fs = File.Create(fileName);
using var archive = new ZipArchive(fs, ZipArchiveMode.Create); //使用上面创建的文件流直接创建一个压缩流
using var zs = archive.CreateEntry(Path.GetFileName(fileName)).Open();
zs.Write(JsonSerializer.SerializeToUtf8Bytes(ca));//将对象json序列化并写入文件中
//(using XXX){}可以写成这样了using var XXX,方便多了,还不用关闭了
解压缩:
using var fs = File.Open(file, FileMode.Open);
using var archive = new ZipArchive(fs, ZipArchiveMode.Read);
using var stream = archive.Entries[0].Open();
var len = (int)archive.Entries[0].Length;
var buffer = ArrayPool<byte>.Shared.Rent(len);//申请一块内存,申请到的空间大于等于需要的len,比new的效率高
MailData ca = null;
try
{
stream.Read(buffer, 0, len);
ca = JsonSerializer.Deserialize<MailData>(new ReadOnlySpan<byte>(buffer, 0, len));
}
finally
{
ArrayPool<byte>.Shared.Return(buffer);//将内存还回去,不用释放
}
网友评论