using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Text; using Newtonsoft.Json; namespace Zerolauncher.Manager { class DataStream { private const string path = "user.data"; public static Data dataStream; public static void Load() { if (File.Exists(path)) { dataStream = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(Decompress(File.ReadAllBytes(path)))); } else { dataStream = JsonConvert.DeserializeObject( "{\"teamIndex\":0,\"Groups\":[{\"Name\":\"队伍1\", \"Accounts\": [{\"providerId\":0,\"userName\":\"test\",\"userPWD\":\"test\",\"nickName\":\"测试账号\",\"serverId\":\"1\"}]}], \"engine_cache_ver\": 0}"); } } public static void write() { string? data = JsonConvert.SerializeObject(dataStream); Trace.WriteLine(data); if (data == null) return; File.WriteAllBytes(path, CompressBytes(Encoding.UTF8.GetBytes(data))); } //压缩字节 //1.创建压缩的数据流 //2.设定compressStream为存放被压缩的文件流,并设定为压缩模式 //3.将需要压缩的字节写到被压缩的文件流 public static byte[] CompressBytes(byte[] bytes) { using (MemoryStream compressStream = new MemoryStream()) { using (var zipStream = new GZipStream(compressStream, CompressionMode.Compress)) zipStream.Write(bytes, 0, bytes.Length); return compressStream.ToArray(); } } //解压缩字节 //1.创建被压缩的数据流 //2.创建zipStream对象,并传入解压的文件流 //3.创建目标流 //4.zipStream拷贝到目标流 //5.返回目标流输出字节 public static byte[] Decompress(byte[] bytes) { using (var compressStream = new MemoryStream(bytes)) { using (var zipStream = new GZipStream(compressStream, CompressionMode.Decompress)) { using (var resultStream = new MemoryStream()) { zipStream.CopyTo(resultStream); return resultStream.ToArray(); } } } } } public class Account { public int providerId; public string userName, userPWD, nickName, serverId; } class Group { public string Name; public List Accounts; } struct Data { public int teamIndex; public List Groups; public int engine_cache_ver; } }