From f62cb14ced7c780c2f7062bbb266009bd776439a Mon Sep 17 00:00:00 2001 From: SmallChi <564952747@qq.com> Date: Fri, 16 Aug 2019 07:14:20 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E8=AF=BB=E5=86=99=E5=99=A8?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E5=80=BC=E7=B1=BB=E5=9E=8B=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E5=BE=AE=E8=BD=AF=E6=8F=90=E4=BE=9B=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=202.=E5=8D=87=E7=BA=A7=E6=B5=8B=E8=AF=95=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JT809.Protocol.Test.csproj | 2 +- .../MessagePack/JT809MessagePackReader.cs | 68 +++++++--------- .../MessagePack/JT809MessagePackWriter.cs | 78 ++++++++----------- 3 files changed, 62 insertions(+), 86 deletions(-) diff --git a/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj b/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj index e23b2c5..baada2c 100644 --- a/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj +++ b/src/JT809.Protocol.Test/JT809.Protocol.Test.csproj @@ -12,7 +12,7 @@ - + all diff --git a/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs b/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs index c39531d..511ee90 100644 --- a/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs +++ b/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs @@ -180,72 +180,59 @@ namespace JT809.Protocol.MessagePack public byte ReadEnd()=> ReadByte(); public ushort ReadUInt16() { - var readOnlySpan = GetReadOnlySpan(2); - ushort value = (ushort)((readOnlySpan[0] << 8) | (readOnlySpan[1])); - return value; + return BinaryPrimitives.ReadUInt16BigEndian(GetReadOnlySpan(2)); } public ushort ReadUInt16(ReadOnlySpan buffer) { - return (ushort)((buffer[0] << 8) | (buffer[1])); + return BinaryPrimitives.ReadUInt16BigEndian(buffer.Slice(0, 2)); } public uint ReadUInt32() { - var readOnlySpan = GetReadOnlySpan(4); - uint value = (uint)((readOnlySpan[0] << 24) | (readOnlySpan[1] << 16) | (readOnlySpan[2] << 8) | readOnlySpan[3]); - return value; + return BinaryPrimitives.ReadUInt32BigEndian(GetReadOnlySpan(4)); } public int ReadInt32() { - var readOnlySpan = GetReadOnlySpan(4); - int value = (int)((readOnlySpan[0] << 24) | (readOnlySpan[1] << 16) | (readOnlySpan[2] << 8) | readOnlySpan[3]); - return value; + return BinaryPrimitives.ReadInt32BigEndian(GetReadOnlySpan(4)); } public ulong ReadUInt64() { - var readOnlySpan = GetReadOnlySpan(8); - ulong value = (ulong)( - (readOnlySpan[0] << 56) | - (readOnlySpan[1] << 48) | - (readOnlySpan[2] << 40) | - (readOnlySpan[3] << 32) | - (readOnlySpan[4] << 24) | - (readOnlySpan[5] << 16) | - (readOnlySpan[6] << 8) | - readOnlySpan[7]); - return value; + return BinaryPrimitives.ReadUInt64BigEndian(GetReadOnlySpan(8)); + } + public long ReadInt64() + { + return BinaryPrimitives.ReadInt64BigEndian(GetReadOnlySpan(8)); } public byte ReadByte() { - var readOnlySpan = GetReadOnlySpan(1); - return readOnlySpan[0]; + return GetReadOnlySpan(1)[0]; } public byte ReadVirtualByte() { - var readOnlySpan = GetVirtualReadOnlySpan(1); - return readOnlySpan[0]; + return GetVirtualReadOnlySpan(1)[0]; } public ushort ReadVirtualUInt16() { - var readOnlySpan = GetVirtualReadOnlySpan(2); - return (ushort)((readOnlySpan[0] << 8) | (readOnlySpan[1])); + return BinaryPrimitives.ReadUInt16BigEndian(GetVirtualReadOnlySpan(2)); + } + public short ReadVirtualInt16() + { + return BinaryPrimitives.ReadInt16BigEndian(GetVirtualReadOnlySpan(2)); } public uint ReadVirtualUInt32() { - var readOnlySpan = GetVirtualReadOnlySpan(4); - return (uint)((readOnlySpan[0] << 24) | (readOnlySpan[1] << 16) | (readOnlySpan[2] << 8) | readOnlySpan[3]); + return BinaryPrimitives.ReadUInt32BigEndian(GetVirtualReadOnlySpan(4)); + } + public int ReadVirtualInt32() + { + return BinaryPrimitives.ReadInt32BigEndian(GetVirtualReadOnlySpan(4)); } public ulong ReadVirtualUInt64() { - var readOnlySpan = GetVirtualReadOnlySpan(8); - return (ulong)( - (readOnlySpan[0] << 56) | - (readOnlySpan[1] << 48) | - (readOnlySpan[2] << 40) | - (readOnlySpan[3] << 32) | - (readOnlySpan[4] << 24) | - (readOnlySpan[5] << 16) | - (readOnlySpan[6] << 8) | - readOnlySpan[7]); + return BinaryPrimitives.ReadUInt64BigEndian(GetVirtualReadOnlySpan(8)); + } + public long ReadVirtualInt64() + { + return BinaryPrimitives.ReadInt64BigEndian(GetVirtualReadOnlySpan(8)); } /// /// 数字编码 大端模式、高位在前 @@ -264,8 +251,7 @@ namespace JT809.Protocol.MessagePack } public ReadOnlySpan ReadArray(int len) { - var readOnlySpan = GetReadOnlySpan(len); - return readOnlySpan.Slice(0, len); + return GetReadOnlySpan(len).Slice(0, len); } public ReadOnlySpan ReadArray(int start,int end) { diff --git a/src/JT809.Protocol/MessagePack/JT809MessagePackWriter.cs b/src/JT809.Protocol/MessagePack/JT809MessagePackWriter.cs index 4d1be07..c5bbe36 100644 --- a/src/JT809.Protocol/MessagePack/JT809MessagePackWriter.cs +++ b/src/JT809.Protocol/MessagePack/JT809MessagePackWriter.cs @@ -61,41 +61,33 @@ namespace JT809.Protocol.MessagePack } public void WriteUInt16(ushort value) { - var span = writer.Free; - span[0] = (byte)(value >> 8); - span[1] = (byte)value; + BinaryPrimitives.WriteUInt16BigEndian(writer.Free, value); + writer.Advance(2); + } + public void WriteInt16(short value) + { + BinaryPrimitives.WriteInt16BigEndian(writer.Free, value); writer.Advance(2); } public void WriteInt32(int value) { - var span = writer.Free; - span[0] = (byte)(value >> 24); - span[1] = (byte)(value >> 16); - span[2] = (byte)(value >> 8); - span[3] = (byte)value; + BinaryPrimitives.WriteInt32BigEndian(writer.Free, value); + writer.Advance(4); + } + public void WriteUInt32(uint value) + { + BinaryPrimitives.WriteUInt32BigEndian(writer.Free, value); writer.Advance(4); } public void WriteUInt64(ulong value) { - var span = writer.Free; - span[0] = (byte)(value >> 56); - span[1] = (byte)(value >> 48); - span[2] = (byte)(value >> 40); - span[3] = (byte)(value >> 32); - span[4] = (byte)(value >> 24); - span[5] = (byte)(value >> 16); - span[6] = (byte)(value >> 8); - span[7] = (byte)value; + BinaryPrimitives.WriteUInt64BigEndian(writer.Free, value); writer.Advance(8); } - public void WriteUInt32(uint value) + public void WriteInt64(long value) { - var span = writer.Free; - span[0] = (byte)(value >> 24); - span[1] = (byte)(value >> 16); - span[2] = (byte)(value >> 8); - span[3] = (byte)value; - writer.Advance(4); + BinaryPrimitives.WriteInt64BigEndian(writer.Free, value); + writer.Advance(8); } public void WriteStringPadLeft(string value, int len) { @@ -152,22 +144,27 @@ namespace JT809.Protocol.MessagePack } public void WriteUInt16Return(ushort value, int position) { - writer.Written[position] = (byte)(value >> 8); - writer.Written[position + 1] = (byte)value; + BinaryPrimitives.WriteUInt16BigEndian(writer.Written.Slice(position,2), value); + } + public void WriteInt16Return(short value, int position) + { + BinaryPrimitives.WriteInt16BigEndian(writer.Written.Slice(position, 2), value); } public void WriteInt32Return(int value, int position) { - writer.Written[position] = (byte)(value >> 24); - writer.Written[position + 1] = (byte)(value >> 16); - writer.Written[position + 2] = (byte)(value >> 8); - writer.Written[position + 3] = (byte)value; + BinaryPrimitives.WriteInt32BigEndian(writer.Written.Slice(position, 4), value); } public void WriteUInt32Return(uint value, int position) { - writer.Written[position] = (byte)(value >> 24); - writer.Written[position + 1] = (byte)(value >> 16); - writer.Written[position + 2] = (byte)(value >> 8); - writer.Written[position + 3] = (byte)value; + BinaryPrimitives.WriteUInt32BigEndian(writer.Written.Slice(position, 4), value); + } + public void WriteInt64Return(long value, int position) + { + BinaryPrimitives.WriteInt64BigEndian(writer.Written.Slice(position, 8), value); + } + public void WriteUInt64Return(ulong value, int position) + { + BinaryPrimitives.WriteUInt64BigEndian(writer.Written.Slice(position, 8), value); } public void WriteByteReturn(byte value, int position) { @@ -193,19 +190,12 @@ namespace JT809.Protocol.MessagePack } public void WriteStringReturn(string value, int position) { - byte[] codeBytes = JT809Constants.Encoding.GetBytes(value); - for (var i = 0; i < codeBytes.Length; i++) - { - writer.Written[position + i] = codeBytes[i]; - } + Span codeBytes = JT809Constants.Encoding.GetBytes(value); + codeBytes.CopyTo(writer.Written.Slice(position)); } public void WriteArrayReturn(ReadOnlySpan src, int position) { - foreach (var item in src) - { - writer.Written[position] = item; - position++; - } + src.CopyTo(writer.Written.Slice(position)); } /// /// yyMMddHHmmss