Просмотр исходного кода

1.修改读写器的数值类型使用微软提供的方法

2.升级测试库
tags/v2.1.1
SmallChi 5 лет назад
Родитель
Сommit
f62cb14ced
3 измененных файлов: 62 добавлений и 86 удалений
  1. +1
    -1
      src/JT809.Protocol.Test/JT809.Protocol.Test.csproj
  2. +27
    -41
      src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs
  3. +34
    -44
      src/JT809.Protocol/MessagePack/JT809MessagePackWriter.cs

+ 1
- 1
src/JT809.Protocol.Test/JT809.Protocol.Test.csproj Просмотреть файл

@@ -12,7 +12,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PrivateAssets>all</PrivateAssets>


+ 27
- 41
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<byte> 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));
}
/// <summary>
/// 数字编码 大端模式、高位在前
@@ -264,8 +251,7 @@ namespace JT809.Protocol.MessagePack
}
public ReadOnlySpan<byte> ReadArray(int len)
{
var readOnlySpan = GetReadOnlySpan(len);
return readOnlySpan.Slice(0, len);
return GetReadOnlySpan(len).Slice(0, len);
}
public ReadOnlySpan<byte> ReadArray(int start,int end)
{


+ 34
- 44
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<byte> codeBytes = JT809Constants.Encoding.GetBytes(value);
codeBytes.CopyTo(writer.Written.Slice(position));
}
public void WriteArrayReturn(ReadOnlySpan<byte> src, int position)
{
foreach (var item in src)
{
writer.Written[position] = item;
position++;
}
src.CopyTo(writer.Written.Slice(position));
}
/// <summary>
/// yyMMddHHmmss


Загрузка…
Отмена
Сохранить