public void UnCompress() { byte[] temp = GZipFileUtil.Uncompress(Bytes); Clear(); WriteBytes(temp); }
public static void LoadABFileInfo(System.Action OnComplete) { _onABFileLoaded = OnComplete; _abAssetPathDic = new Dictionary <string, string>(); _assetDic = new Dictionary <string, object>(); _abDic = new Dictionary <string, AssetBundle>(); _loadingABCountDic = new Dictionary <string, uint>(); _loadedTask = new List <LoadTask>(); _taskDic = new Dictionary <System.Action <object>, LoadTask>(); _unloadABList = new List <string>(); //加载resouce资源路径与ab路径对照表 string relativeUrl = AssetPathUtil.PlatformString + "/abfile.bytes"; GetBinaryResource(relativeUrl, (object content) => { byte[] data = GZipFileUtil.Uncompress(content as byte[]); string dataStr = Encoding.UTF8.GetString(data); string[] fileInfos = dataStr.Split(new string[] { "\n" }, StringSplitOptions.None); foreach (string fileInfo in fileInfos) { string[] abResArr = fileInfo.Split(':'); if (abResArr.Length > 1) { _abAssetPathDic.Add(abResArr[0], abResArr[1]); } } OnComplete.Invoke(); }); }
/// <summary> /// 解析本地版本文件 /// </summary> /// <param name="bytes"></param> public static void ParseLocalVersionFile(byte[] bytes) { byte[] rawBytes = GZipFileUtil.Uncompress(bytes); string dataStr = Encoding.UTF8.GetString(rawBytes); _localFileDic = new Dictionary <string, FileVerInfo>(); _cacheFileDic = new Dictionary <string, FileVerInfo>(); string[] splitStr = new string[] { "\n" }; string[] data = dataStr.Split(splitStr, StringSplitOptions.None); char[] fileVerSplit = new char[] { ':', '|' }; foreach (string fileVerStr in data) { string[] fileVer = fileVerStr.Split(fileVerSplit); if (fileVer.Length < 3) { continue; } FileVerInfo info = new FileVerInfo(); info.relativePath = fileVer[0]; info.absolutePath = Path.Combine(AssetPathUtil.StreamingAssetPath, info.relativePath); info.md5Code = fileVer[1]; info.size = uint.Parse(fileVer[2]); _localFileDic.Add(info.relativePath, info); } }
public static ReceivePackage ParseCmd(ByteArray byteArr) { uint len1 = byteArr.ReadUnsignedByte(); uint len2 = byteArr.ReadUnsignedByte(); uint len3 = byteArr.ReadUnsignedByte(); uint packBodyLen = len1 | len2 << 8 | len3 << 16; bool isCompress = byteArr.ReadUnsignedByte() == 1; // uint cmdID = byteArr.ReadUnsignedShort(); if (packBodyLen == 2) return new ReceivePackage((int)cmdID); byte[] packBody = new byte[packBodyLen - 2]; byteArr.ReadBytes(packBody, packBody.Length); if (isCompress) packBody = GZipFileUtil.Uncompress(packBody); MemoryStream stream = new MemoryStream(); stream.Write(packBody, 0, packBody.Length); stream.Position = 0; return new ReceivePackage((int)cmdID, stream); }
public static T ParseCmd<T>(byte[] bytes) { ByteArray byteArr = new ByteArray(); byteArr.WriteBytes(bytes); uint len1 = byteArr.ReadUnsignedByte(); uint len2 = byteArr.ReadUnsignedByte(); uint len3 = byteArr.ReadUnsignedByte(); uint packBodyLen = len1 | len2 << 8 | len3 << 16; bool isCompress = byteArr.ReadUnsignedByte() == 1; // uint cmdID = byteArr.ReadUnsignedShort(); byte[] packBody = new byte[packBodyLen - 2]; byteArr.ReadBytes(packBody, packBody.Length); if (isCompress) packBody = GZipFileUtil.Uncompress(packBody); MemoryStream stream = new MemoryStream(); stream.Write(packBody, 0, packBody.Length); stream.Position = 0; return ProtoBuf.Serializer.Deserialize<T>(stream); }
/// <summary> /// 解析CDN版本文件获取热更新文件表 /// </summary> /// <param name="bytes"></param> public static List <FileVerInfo> ParseRemoteVersionFile(byte[] bytes) { List <FileVerInfo> downLoadList = new List <FileVerInfo>(); byte[] rawBytes = GZipFileUtil.Uncompress(bytes); string dataStr = Encoding.UTF8.GetString(rawBytes); string[] splitStr = new string[] { "\n" }; string[] data = dataStr.Split(splitStr, StringSplitOptions.None); char[] fileVerSplit = new char[] { ':', '|' }; foreach (string fileVerStr in data) { string[] fileVer = fileVerStr.Split(fileVerSplit); if (fileVer.Length < 3) { continue; } FileVerInfo info = new FileVerInfo(); info.relativePath = fileVer[0]; info.absolutePath = AssetPathUtil.PersistentDataPath + info.relativePath; info.md5Code = fileVer[1]; info.size = uint.Parse(fileVer[2]); if (_localFileDic.ContainsKey(info.relativePath)) { FileVerInfo localFileInfo = _localFileDic[info.relativePath]; if (localFileInfo.md5Code != info.md5Code) { downLoadList.Add(info); } } else { downLoadList.Add(info); } } return(downLoadList); }