diff --git a/Assets/YooAsset/Runtime/Utility/YooUtility.cs b/Assets/YooAsset/Runtime/Utility/YooUtility.cs
index 1f12aa62..57132f2f 100644
--- a/Assets/YooAsset/Runtime/Utility/YooUtility.cs
+++ b/Assets/YooAsset/Runtime/Utility/YooUtility.cs
@@ -1,377 +1,87 @@
-using System;
-using System.IO;
-using System.Security.Cryptography;
-using System.Text;
+using System;
+using System.Diagnostics;
namespace YooAsset
{
///
- /// 路径工具类
+ /// 自定义日志处理
///
- internal static class PathUtility
+ public interface ILogger
{
- ///
- /// 路径归一化
- /// 注意:替换为Linux路径格式
- ///
- public static string RegularPath(string path)
- {
- return path.Replace('\\', '/').Replace("\\", "/");
- }
+ void Log(string message);
+ void Warning(string message);
+ void Error(string message);
+ void Exception(System.Exception exception);
+ }
+
+ internal static class YooLogger
+ {
+ public static ILogger Logger = null;
///
- /// 移除路径里的后缀名
+ /// 日志
///
- public static string RemoveExtension(string str)
+ [Conditional("DEBUG")]
+ public static void Log(string info)
{
- if (string.IsNullOrEmpty(str))
- return str;
-
- int index = str.LastIndexOf('.');
- if (index == -1)
- return str;
+ if (Logger != null)
+ {
+ Logger.Log(GetTime() + info);
+ }
else
- return str.Remove(index); //"assets/config/test.unity3d" --> "assets/config/test"
+ {
+ UnityEngine.Debug.Log(GetTime() + info);
+ }
}
///
- /// 合并路径
+ /// 警告
///
- public static string Combine(string path1, string path2)
+ public static void Warning(string info)
{
- return StringUtility.Format("{0}/{1}", path1, path2);
+ if (Logger != null)
+ {
+ Logger.Warning(GetTime() + info);
+ }
+ else
+ {
+ UnityEngine.Debug.LogWarning(GetTime() + info);
+ }
}
///
- /// 合并路径
+ /// 错误
///
- public static string Combine(string path1, string path2, string path3)
+ public static void Error(string info)
{
- return StringUtility.Format("{0}/{1}/{2}", path1, path2, path3);
+ if (Logger != null)
+ {
+ Logger.Error(GetTime() + info);
+ }
+ else
+ {
+ UnityEngine.Debug.LogError(GetTime() + info);
+ }
+ }
+
+ private static string GetTime()
+ {
+ return $"[YooAsset]:[{DateTime.Now:HH:mm:ss.fff}]:";
}
///
- /// 合并路径
+ /// 异常
///
- public static string Combine(string path1, string path2, string path3, string path4)
+ public static void Exception(System.Exception exception)
{
- return StringUtility.Format("{0}/{1}/{2}/{3}", path1, path2, path3, path4);
+ if (Logger != null)
+ {
+ Logger.Exception(exception);
+ }
+ else
+ {
+ UnityEngine.Debug.LogException(exception);
+ }
}
}
-
- ///
- /// 字符串工具类
- ///
- internal static class StringUtility
- {
- [ThreadStatic]
- private static StringBuilder _cacheBuilder = new StringBuilder(2048);
-
- public static string Format(string format, object arg0)
- {
- if (string.IsNullOrEmpty(format))
- throw new ArgumentNullException();
-
- _cacheBuilder.Length = 0;
- _cacheBuilder.AppendFormat(format, arg0);
- return _cacheBuilder.ToString();
- }
- public static string Format(string format, object arg0, object arg1)
- {
- if (string.IsNullOrEmpty(format))
- throw new ArgumentNullException();
-
- _cacheBuilder.Length = 0;
- _cacheBuilder.AppendFormat(format, arg0, arg1);
- return _cacheBuilder.ToString();
- }
- public static string Format(string format, object arg0, object arg1, object arg2)
- {
- if (string.IsNullOrEmpty(format))
- throw new ArgumentNullException();
-
- _cacheBuilder.Length = 0;
- _cacheBuilder.AppendFormat(format, arg0, arg1, arg2);
- return _cacheBuilder.ToString();
- }
- public static string Format(string format, params object[] args)
- {
- if (string.IsNullOrEmpty(format))
- throw new ArgumentNullException();
-
- if (args == null)
- throw new ArgumentNullException();
-
- _cacheBuilder.Length = 0;
- _cacheBuilder.AppendFormat(format, args);
- return _cacheBuilder.ToString();
- }
- }
-
- ///
- /// 文件工具类
- ///
- internal static class FileUtility
- {
- ///
- /// 读取文件的文本数据
- ///
- public static string ReadAllText(string filePath)
- {
- if (File.Exists(filePath) == false)
- return null;
- return File.ReadAllText(filePath, Encoding.UTF8);
- }
-
- ///
- /// 读取文件的字节数据
- ///
- public static byte[] ReadAllBytes(string filePath)
- {
- if (File.Exists(filePath) == false)
- return null;
- return File.ReadAllBytes(filePath);
- }
-
- ///
- /// 写入文本数据(会覆盖指定路径的文件)
- ///
- public static void WriteAllText(string filePath, string content)
- {
- // 创建文件夹路径
- CreateFileDirectory(filePath);
-
- byte[] bytes = Encoding.UTF8.GetBytes(content);
- File.WriteAllBytes(filePath, bytes); //避免写入BOM标记
- }
-
- ///
- /// 写入字节数据(会覆盖指定路径的文件)
- ///
- public static void WriteAllBytes(string filePath, byte[] data)
- {
- // 创建文件夹路径
- CreateFileDirectory(filePath);
-
- File.WriteAllBytes(filePath, data);
- }
-
- ///
- /// 创建文件的文件夹路径
- ///
- public static void CreateFileDirectory(string filePath)
- {
- // 获取文件的文件夹路径
- string directory = Path.GetDirectoryName(filePath);
- CreateDirectory(directory);
- }
-
- ///
- /// 创建文件夹路径
- ///
- public static void CreateDirectory(string directory)
- {
- // If the directory doesn't exist, create it.
- if (Directory.Exists(directory) == false)
- Directory.CreateDirectory(directory);
- }
-
- ///
- /// 获取文件大小(字节数)
- ///
- public static long GetFileSize(string filePath)
- {
- FileInfo fileInfo = new FileInfo(filePath);
- return fileInfo.Length;
- }
- }
-
- ///
- /// 哈希工具类
- ///
- public static class HashUtility
- {
- private static string ToString(byte[] hashBytes)
- {
- string result = BitConverter.ToString(hashBytes);
- result = result.Replace("-", "");
- return result.ToLower();
- }
-
- #region SHA1
- ///
- /// 获取字符串的Hash值
- ///
- public static string StringSHA1(string str)
- {
- byte[] buffer = Encoding.UTF8.GetBytes(str);
- return BytesSHA1(buffer);
- }
-
- ///
- /// 获取文件的Hash值
- ///
- public static string FileSHA1(string filePath)
- {
- using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- return StreamSHA1(fs);
- }
- }
-
- ///
- /// 获取文件的Hash值
- ///
- public static string FileSHA1Safely(string filePath)
- {
- try
- {
- return FileSHA1(filePath);
- }
- catch (Exception e)
- {
- YooLogger.Exception(e);
- return string.Empty;
- }
- }
-
- ///
- /// 获取数据流的Hash值
- ///
- public static string StreamSHA1(Stream stream)
- {
- // 说明:创建的是SHA1类的实例,生成的是160位的散列码
- HashAlgorithm hash = HashAlgorithm.Create();
- byte[] hashBytes = hash.ComputeHash(stream);
- return ToString(hashBytes);
- }
-
- ///
- /// 获取字节数组的Hash值
- ///
- public static string BytesSHA1(byte[] buffer)
- {
- // 说明:创建的是SHA1类的实例,生成的是160位的散列码
- HashAlgorithm hash = HashAlgorithm.Create();
- byte[] hashBytes = hash.ComputeHash(buffer);
- return ToString(hashBytes);
- }
- #endregion
-
- #region MD5
- ///
- /// 获取字符串的MD5
- ///
- public static string StringMD5(string str)
- {
- byte[] buffer = Encoding.UTF8.GetBytes(str);
- return BytesMD5(buffer);
- }
-
- ///
- /// 获取文件的MD5
- ///
- public static string FileMD5(string filePath)
- {
- using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- return StreamMD5(fs);
- }
- }
-
- ///
- /// 获取文件的MD5
- ///
- public static string FileMD5Safely(string filePath)
- {
- try
- {
- return FileMD5(filePath);
- }
- catch (Exception e)
- {
- YooLogger.Exception(e);
- return string.Empty;
- }
- }
-
- ///
- /// 获取数据流的MD5
- ///
- public static string StreamMD5(Stream stream)
- {
- MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
- byte[] hashBytes = provider.ComputeHash(stream);
- return ToString(hashBytes);
- }
-
- ///
- /// 获取字节数组的MD5
- ///
- public static string BytesMD5(byte[] buffer)
- {
- MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
- byte[] hashBytes = provider.ComputeHash(buffer);
- return ToString(hashBytes);
- }
- #endregion
-
- #region CRC32
- ///
- /// 获取字符串的CRC32
- ///
- public static string StringCRC32(string str)
- {
- byte[] buffer = Encoding.UTF8.GetBytes(str);
- return BytesCRC32(buffer);
- }
-
- ///
- /// 获取文件的CRC32
- ///
- public static string FileCRC32(string filePath)
- {
- using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
- {
- return StreamCRC32(fs);
- }
- }
-
- ///
- /// 获取文件的CRC32
- ///
- public static string FileCRC32Safely(string filePath)
- {
- try
- {
- return FileCRC32(filePath);
- }
- catch (Exception e)
- {
- YooLogger.Exception(e);
- return string.Empty;
- }
- }
-
- ///
- /// 获取数据流的CRC32
- ///
- public static string StreamCRC32(Stream stream)
- {
- CRC32Algorithm hash = new CRC32Algorithm();
- byte[] hashBytes = hash.ComputeHash(stream);
- return ToString(hashBytes);
- }
-
- ///
- /// 获取字节数组的CRC32
- ///
- public static string BytesCRC32(byte[] buffer)
- {
- CRC32Algorithm hash = new CRC32Algorithm();
- byte[] hashBytes = hash.ComputeHash(buffer);
- return ToString(hashBytes);
- }
- #endregion
- }
-}
\ No newline at end of file
+}