From 5bf1d29edc0355304e5b0471043c9e71576f5108 Mon Sep 17 00:00:00 2001 From: hevinci Date: Sun, 4 Dec 2022 20:14:02 +0800 Subject: [PATCH] update utility --- .../YooAsset/Runtime/Utility/BufferDefine.cs | 22 --- .../Runtime/Utility/BufferDefine.cs.meta | 11 -- .../YooAsset/Runtime/Utility/BufferReader.cs | 138 ++++++------------ .../YooAsset/Runtime/Utility/BufferWriter.cs | 118 +++------------ 4 files changed, 63 insertions(+), 226 deletions(-) delete mode 100644 Assets/YooAsset/Runtime/Utility/BufferDefine.cs delete mode 100644 Assets/YooAsset/Runtime/Utility/BufferDefine.cs.meta diff --git a/Assets/YooAsset/Runtime/Utility/BufferDefine.cs b/Assets/YooAsset/Runtime/Utility/BufferDefine.cs deleted file mode 100644 index 3d4f24f..0000000 --- a/Assets/YooAsset/Runtime/Utility/BufferDefine.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Runtime.InteropServices; - -namespace YooAsset -{ - [StructLayout(LayoutKind.Explicit)] - internal struct DoubleContent - { - [FieldOffset(0)] - public double doubleValue; - [FieldOffset(0)] - public ulong ulongValue; - } - - [StructLayout(LayoutKind.Explicit)] - internal struct FloatContent - { - [FieldOffset(0)] - public float floatValue; - [FieldOffset(0)] - public uint uintValue; - } -} \ No newline at end of file diff --git a/Assets/YooAsset/Runtime/Utility/BufferDefine.cs.meta b/Assets/YooAsset/Runtime/Utility/BufferDefine.cs.meta deleted file mode 100644 index 6e67548..0000000 --- a/Assets/YooAsset/Runtime/Utility/BufferDefine.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d89dfb0a9c98df548aa15f76dc8c2ac0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/YooAsset/Runtime/Utility/BufferReader.cs b/Assets/YooAsset/Runtime/Utility/BufferReader.cs index 350e253..a628b46 100644 --- a/Assets/YooAsset/Runtime/Utility/BufferReader.cs +++ b/Assets/YooAsset/Runtime/Utility/BufferReader.cs @@ -3,7 +3,6 @@ using System.Collections; using System.Collections.Generic; using System.Text; using System.Diagnostics; -using UnityEngine; namespace YooAsset { @@ -38,10 +37,6 @@ namespace YooAsset CheckReaderIndex(1); return _buffer[_index++]; } - public sbyte ReadSbyte() - { - return (sbyte)ReadByte(); - } public bool ReadBool() { @@ -50,60 +45,65 @@ namespace YooAsset } public short ReadInt16() { - return (short)ReadUInt16(); + CheckReaderIndex(2); + if (BitConverter.IsLittleEndian) + { + short value = (short)((_buffer[_index]) | (_buffer[_index + 1] << 8)); + _index += 2; + return value; + } + else + { + short value = (short)((_buffer[_index] << 8) | (_buffer[_index + 1])); + _index += 2; + return value; + } } public ushort ReadUInt16() { - CheckReaderIndex(2); - ushort value = 0; - for (int i = 0; i < 2; i++) - { - value += (ushort)(_buffer[_index++] << (i * 8)); - } - return value; + return (ushort)ReadInt16(); } public int ReadInt32() { - return (int)ReadUInt32(); + CheckReaderIndex(4); + if (BitConverter.IsLittleEndian) + { + int value = (_buffer[_index]) | (_buffer[_index + 1] << 8) | (_buffer[_index + 2] << 16) | (_buffer[_index + 3] << 24); + _index += 4; + return value; + } + else + { + int value = (_buffer[_index] << 24) | (_buffer[_index + 1] << 16) | (_buffer[_index + 2] << 8) | (_buffer[_index + 3]); + _index += 4; + return value; + } } public uint ReadUInt32() { - CheckReaderIndex(4); - uint value = 0; - for (int i = 0; i < 4; i++) - { - value += (uint)(_buffer[_index++] << (i * 8)); - } - return value; + return (uint)ReadInt32(); } public long ReadInt64() { - return (long)ReadUInt64(); + CheckReaderIndex(8); + if (BitConverter.IsLittleEndian) + { + int i1 = (_buffer[_index]) | (_buffer[_index + 1] << 8) | (_buffer[_index + 2] << 16) | (_buffer[_index + 3] << 24); + int i2 = (_buffer[_index + 4]) | (_buffer[_index + 5] << 8) | (_buffer[_index + 6] << 16) | (_buffer[_index + 7] << 24); + _index += 8; + return (uint)i1 | ((long)i2 << 32); + } + else + { + int i1 = (_buffer[_index] << 24) | (_buffer[_index + 1] << 16) | (_buffer[_index + 2] << 8) | (_buffer[_index + 3]); + int i2 = (_buffer[_index + 4] << 24) | (_buffer[_index + 5] << 16) | (_buffer[_index + 6] << 8) | (_buffer[_index + 7]); + _index += 8; + return (uint)i2 | ((long)i1 << 32); + } } public ulong ReadUInt64() { - CheckReaderIndex(8); - ulong value = 0; - for (int i = 0; i < 8; i++) - { - value += (ulong)(_buffer[_index++] << (i * 8)); - } - return value; - } - - public float ReadSingle() - { - CheckReaderIndex(4); - FloatContent content = new FloatContent(); - content.uintValue = ReadUInt32(); - return content.floatValue; - } - public double ReadDouble() - { - CheckReaderIndex(8); - DoubleContent content = new DoubleContent(); - content.ulongValue = ReadUInt64(); - return content.doubleValue; + return (ulong)ReadInt64(); } public string ReadUTF8() @@ -137,26 +137,6 @@ namespace YooAsset } return values; } - public float[] ReadFloatArray() - { - ushort count = ReadUInt16(); - float[] values = new float[count]; - for (int i = 0; i < count; i++) - { - values[i] = ReadSingle(); - } - return values; - } - public double[] ReadDoubleArray() - { - ushort count = ReadUInt16(); - double[] values = new double[count]; - for (int i = 0; i < count; i++) - { - values[i] = ReadDouble(); - } - return values; - } public string[] ReadUTF8Array() { ushort count = ReadUInt16(); @@ -168,36 +148,6 @@ namespace YooAsset return values; } - public Vector2 ReadVector2() - { - float x = ReadSingle(); - float y = ReadSingle(); - return new Vector2(x, y); - } - public Vector3 ReadVector3() - { - float x = ReadSingle(); - float y = ReadSingle(); - float z = ReadSingle(); - return new Vector3(x, y, z); - } - public Vector4 ReadVector4() - { - float x = ReadSingle(); - float y = ReadSingle(); - float z = ReadSingle(); - float w = ReadSingle(); - return new Vector4(x, y, z, w); - } - public Quaternion ReadQuaternion() - { - float x = ReadSingle(); - float y = ReadSingle(); - float z = ReadSingle(); - float w = ReadSingle(); - return new Quaternion(x, y, z, w); - } - [Conditional("DEBUG")] private void CheckReaderIndex(int length) { diff --git a/Assets/YooAsset/Runtime/Utility/BufferWriter.cs b/Assets/YooAsset/Runtime/Utility/BufferWriter.cs index f2c9b39..225939e 100644 --- a/Assets/YooAsset/Runtime/Utility/BufferWriter.cs +++ b/Assets/YooAsset/Runtime/Utility/BufferWriter.cs @@ -4,10 +4,12 @@ using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.IO; -using UnityEngine; namespace YooAsset { + /// + /// 数据存储以小端字节序为标准 + /// internal class BufferWriter { private readonly byte[] _buffer; @@ -36,12 +38,9 @@ namespace YooAsset public void WriteBytes(byte[] data) { - WriteBytes(data, 0, data.Length); - } - public void WriteBytes(byte[] data, int offset, int count) - { + int count = data.Length; CheckWriterIndex(count); - Buffer.BlockCopy(data, offset, _buffer, _index, count); + Buffer.BlockCopy(data, 0, _buffer, _index, count); _index += count; } public void WriteByte(byte value) @@ -49,10 +48,6 @@ namespace YooAsset CheckWriterIndex(1); _buffer[_index++] = value; } - public void WriteSbyte(sbyte value) - { - WriteByte((byte)value); - } public void WriteBool(bool value) { @@ -65,10 +60,8 @@ namespace YooAsset public void WriteUInt16(ushort value) { CheckWriterIndex(2); - for (int i = 0; i < 2; i++) - { - _buffer[_index++] = (byte)(value >> (i * 8)); - } + _buffer[_index++] = (byte)value; + _buffer[_index++] = (byte)(value >> 8); } public void WriteInt32(int value) { @@ -77,10 +70,10 @@ namespace YooAsset public void WriteUInt32(uint value) { CheckWriterIndex(4); - for (int i = 0; i < 4; i++) - { - _buffer[_index++] = (byte)(value >> (i * 8)); - } + _buffer[_index++] = (byte)value; + _buffer[_index++] = (byte)(value >> 8); + _buffer[_index++] = (byte)(value >> 16); + _buffer[_index++] = (byte)(value >> 24); } public void WriteInt64(long value) { @@ -89,23 +82,14 @@ namespace YooAsset public void WriteUInt64(ulong value) { CheckWriterIndex(8); - for (int i = 0; i < 8; i++) - { - _buffer[_index++] = (byte)(value >> (i * 8)); - } - } - - public void WriteSingle(float value) - { - FloatContent content = new FloatContent(); - content.floatValue = value; - WriteUInt32(content.uintValue); - } - public void WriteDouble(double value) - { - DoubleContent content = new DoubleContent(); - content.doubleValue = value; - WriteUInt64(content.ulongValue); + _buffer[_index++] = (byte)value; + _buffer[_index++] = (byte)(value >> 8); + _buffer[_index++] = (byte)(value >> 16); + _buffer[_index++] = (byte)(value >> 24); + _buffer[_index++] = (byte)(value >> 32); + _buffer[_index++] = (byte)(value >> 40); + _buffer[_index++] = (byte)(value >> 48); + _buffer[_index++] = (byte)(value >> 56); } public void WriteUTF8(string value) @@ -163,44 +147,6 @@ namespace YooAsset } } } - public void WriteSingleArray(float[] values) - { - if (values == null) - { - WriteUInt16(0); - } - else - { - int count = values.Length; - if (count > ushort.MaxValue) - throw new FormatException($"Write array length cannot be greater than {ushort.MaxValue} !"); - - WriteUInt16(Convert.ToUInt16(count)); - for (int i = 0; i < count; i++) - { - WriteSingle(values[i]); - } - } - } - public void WriteDoubleArray(double[] values) - { - if (values == null) - { - WriteUInt16(0); - } - else - { - int count = values.Length; - if (count > ushort.MaxValue) - throw new FormatException($"Write array length cannot be greater than {ushort.MaxValue} !"); - - WriteUInt16(Convert.ToUInt16(count)); - for (int i = 0; i < count; i++) - { - WriteDouble(values[i]); - } - } - } public void WriteUTF8Array(string[] values) { if (values == null) @@ -221,32 +167,6 @@ namespace YooAsset } } - public void WriteVector2(Vector2 value) - { - WriteSingle(value.x); - WriteSingle(value.y); - } - public void WriteVector3(Vector3 value) - { - WriteSingle(value.x); - WriteSingle(value.y); - WriteSingle(value.z); - } - public void WriteVector4(Vector4 value) - { - WriteSingle(value.x); - WriteSingle(value.y); - WriteSingle(value.z); - WriteSingle(value.w); - } - public void WriteQuaternion(Quaternion value) - { - WriteSingle(value.x); - WriteSingle(value.y); - WriteSingle(value.z); - WriteSingle(value.w); - } - [Conditional("DEBUG")] private void CheckWriterIndex(int length) {