cloudflight
2023-11-23 2284ddda0e49d402ff901d6691e937af4c628858
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections.Concurrent;
using MessagePack;
using MessagePack.Resolvers;
using System.Runtime.CompilerServices;
using System.Runtime.Serialization;
//using NPOI.SS.Formula.Functions;
 
namespace CommonBase
{
    public class Base64Helper
    {
        public static void SaveCompressedBase64ToFile<T>(T obj, string filePath)
        {
            // 将对象序列化为字节数组
            var formatter = new BinaryFormatter();
            using (var memoryStream = new MemoryStream())
            {
                formatter.Serialize(memoryStream, obj);
                byte[] compressedData;
 
                // 使用 GZip 压缩字节数组
                using (var outputStream = new MemoryStream())
                {
                    using (var gzipStream = new GZipStream(outputStream, CompressionMode.Compress))
                    {
                        memoryStream.Position = 0;
                        memoryStream.CopyTo(gzipStream);
                    }
                    compressedData = outputStream.ToArray();
                }
 
                // 将压缩后的字节数组转为 Base64 字符串
                var base64String = Convert.ToBase64String(compressedData);
 
                // 将 Base64 字符串写入文件
                File.WriteAllText(filePath, base64String);
            }
        }
 
        public static T ReadCompressedBase64FromFile<T>(string filePath)
        {
            // 从文件中读取 Base64 字符串
            var base64String = File.ReadAllText(filePath);
 
            // 将 Base64 字符串转为压缩后的字节数组
            byte[] compressedData = Convert.FromBase64String(base64String);
 
            // 使用 GZip 解压缩字节数组
            using (var inputStream = new MemoryStream(compressedData))
            using (var outputStream = new MemoryStream())
            {
                using (var gzipStream = new GZipStream(inputStream, CompressionMode.Decompress))
                {
                    gzipStream.CopyTo(outputStream);
                }
 
                // 将解压缩后的字节数组反序列化为对象
                var formatter = new BinaryFormatter();
                outputStream.Position = 0;
                var obj = (T)formatter.Deserialize(outputStream);
 
                return obj;
            }
        }
 
 
 
        
 
    }
 
}