mirror of https://github.com/tuyoogame/YooAsset
update utility
parent
2687466ed4
commit
5bf1d29edc
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: d89dfb0a9c98df548aa15f76dc8c2ac0
|
|
||||||
MonoImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
|
@ -3,7 +3,6 @@ using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
|
@ -38,10 +37,6 @@ namespace YooAsset
|
||||||
CheckReaderIndex(1);
|
CheckReaderIndex(1);
|
||||||
return _buffer[_index++];
|
return _buffer[_index++];
|
||||||
}
|
}
|
||||||
public sbyte ReadSbyte()
|
|
||||||
{
|
|
||||||
return (sbyte)ReadByte();
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ReadBool()
|
public bool ReadBool()
|
||||||
{
|
{
|
||||||
|
@ -50,60 +45,65 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
public short ReadInt16()
|
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()
|
public ushort ReadUInt16()
|
||||||
{
|
{
|
||||||
CheckReaderIndex(2);
|
return (ushort)ReadInt16();
|
||||||
ushort value = 0;
|
|
||||||
for (int i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
value += (ushort)(_buffer[_index++] << (i * 8));
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
public int ReadInt32()
|
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()
|
public uint ReadUInt32()
|
||||||
{
|
{
|
||||||
CheckReaderIndex(4);
|
return (uint)ReadInt32();
|
||||||
uint value = 0;
|
|
||||||
for (int i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
value += (uint)(_buffer[_index++] << (i * 8));
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
public long ReadInt64()
|
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()
|
public ulong ReadUInt64()
|
||||||
{
|
{
|
||||||
CheckReaderIndex(8);
|
return (ulong)ReadInt64();
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ReadUTF8()
|
public string ReadUTF8()
|
||||||
|
@ -137,26 +137,6 @@ namespace YooAsset
|
||||||
}
|
}
|
||||||
return values;
|
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()
|
public string[] ReadUTF8Array()
|
||||||
{
|
{
|
||||||
ushort count = ReadUInt16();
|
ushort count = ReadUInt16();
|
||||||
|
@ -168,36 +148,6 @@ namespace YooAsset
|
||||||
return values;
|
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")]
|
[Conditional("DEBUG")]
|
||||||
private void CheckReaderIndex(int length)
|
private void CheckReaderIndex(int length)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,10 +4,12 @@ using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 数据存储以小端字节序为标准
|
||||||
|
/// </summary>
|
||||||
internal class BufferWriter
|
internal class BufferWriter
|
||||||
{
|
{
|
||||||
private readonly byte[] _buffer;
|
private readonly byte[] _buffer;
|
||||||
|
@ -36,12 +38,9 @@ namespace YooAsset
|
||||||
|
|
||||||
public void WriteBytes(byte[] data)
|
public void WriteBytes(byte[] data)
|
||||||
{
|
{
|
||||||
WriteBytes(data, 0, data.Length);
|
int count = data.Length;
|
||||||
}
|
|
||||||
public void WriteBytes(byte[] data, int offset, int count)
|
|
||||||
{
|
|
||||||
CheckWriterIndex(count);
|
CheckWriterIndex(count);
|
||||||
Buffer.BlockCopy(data, offset, _buffer, _index, count);
|
Buffer.BlockCopy(data, 0, _buffer, _index, count);
|
||||||
_index += count;
|
_index += count;
|
||||||
}
|
}
|
||||||
public void WriteByte(byte value)
|
public void WriteByte(byte value)
|
||||||
|
@ -49,10 +48,6 @@ namespace YooAsset
|
||||||
CheckWriterIndex(1);
|
CheckWriterIndex(1);
|
||||||
_buffer[_index++] = value;
|
_buffer[_index++] = value;
|
||||||
}
|
}
|
||||||
public void WriteSbyte(sbyte value)
|
|
||||||
{
|
|
||||||
WriteByte((byte)value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void WriteBool(bool value)
|
public void WriteBool(bool value)
|
||||||
{
|
{
|
||||||
|
@ -65,10 +60,8 @@ namespace YooAsset
|
||||||
public void WriteUInt16(ushort value)
|
public void WriteUInt16(ushort value)
|
||||||
{
|
{
|
||||||
CheckWriterIndex(2);
|
CheckWriterIndex(2);
|
||||||
for (int i = 0; i < 2; i++)
|
_buffer[_index++] = (byte)value;
|
||||||
{
|
_buffer[_index++] = (byte)(value >> 8);
|
||||||
_buffer[_index++] = (byte)(value >> (i * 8));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
public void WriteInt32(int value)
|
public void WriteInt32(int value)
|
||||||
{
|
{
|
||||||
|
@ -77,10 +70,10 @@ namespace YooAsset
|
||||||
public void WriteUInt32(uint value)
|
public void WriteUInt32(uint value)
|
||||||
{
|
{
|
||||||
CheckWriterIndex(4);
|
CheckWriterIndex(4);
|
||||||
for (int i = 0; i < 4; i++)
|
_buffer[_index++] = (byte)value;
|
||||||
{
|
_buffer[_index++] = (byte)(value >> 8);
|
||||||
_buffer[_index++] = (byte)(value >> (i * 8));
|
_buffer[_index++] = (byte)(value >> 16);
|
||||||
}
|
_buffer[_index++] = (byte)(value >> 24);
|
||||||
}
|
}
|
||||||
public void WriteInt64(long value)
|
public void WriteInt64(long value)
|
||||||
{
|
{
|
||||||
|
@ -89,23 +82,14 @@ namespace YooAsset
|
||||||
public void WriteUInt64(ulong value)
|
public void WriteUInt64(ulong value)
|
||||||
{
|
{
|
||||||
CheckWriterIndex(8);
|
CheckWriterIndex(8);
|
||||||
for (int i = 0; i < 8; i++)
|
_buffer[_index++] = (byte)value;
|
||||||
{
|
_buffer[_index++] = (byte)(value >> 8);
|
||||||
_buffer[_index++] = (byte)(value >> (i * 8));
|
_buffer[_index++] = (byte)(value >> 16);
|
||||||
}
|
_buffer[_index++] = (byte)(value >> 24);
|
||||||
}
|
_buffer[_index++] = (byte)(value >> 32);
|
||||||
|
_buffer[_index++] = (byte)(value >> 40);
|
||||||
public void WriteSingle(float value)
|
_buffer[_index++] = (byte)(value >> 48);
|
||||||
{
|
_buffer[_index++] = (byte)(value >> 56);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteUTF8(string value)
|
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)
|
public void WriteUTF8Array(string[] values)
|
||||||
{
|
{
|
||||||
if (values == null)
|
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")]
|
[Conditional("DEBUG")]
|
||||||
private void CheckWriterIndex(int length)
|
private void CheckWriterIndex(int length)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue