序列化对象并写入压缩文件及解压缩

2021-04-13  本文已影响0人  价值投机168
 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);//将内存还回去,不用释放
                            }
上一篇 下一篇

猜你喜欢

热点阅读