149 lines
3.5 KiB
C#
149 lines
3.5 KiB
C#
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
//
|
|||
|
|
// 文件:Assets/Code/Scripts/Framework/Net/Base/NetWriter.cs
|
|||
|
|
// 作者:Xoen Xie
|
|||
|
|
// 时间:2023/07/18
|
|||
|
|
// 描述:二进制流式写,小端
|
|||
|
|
// 说明:
|
|||
|
|
//
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
using System;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Text;
|
|||
|
|
|
|||
|
|
namespace Framework
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public sealed class NetWriter
|
|||
|
|
{
|
|||
|
|
private MemoryStream m_Stream;
|
|||
|
|
|
|||
|
|
public NetWriter()
|
|||
|
|
{
|
|||
|
|
m_Stream = new MemoryStream();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public byte[] Buffer
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return m_Stream.GetBuffer();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public long Size
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return m_Stream.Position;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void Clear()
|
|||
|
|
{
|
|||
|
|
m_Stream.Seek(0, SeekOrigin.Begin);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteByte(byte value)
|
|||
|
|
{
|
|||
|
|
m_Stream.WriteByte(value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteSbyte(sbyte value)
|
|||
|
|
{
|
|||
|
|
m_Stream.WriteByte((byte)value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteShort(short value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteUShort(ushort value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteInt(int value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteUInt(uint value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteLong(long value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteULong(ulong value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteBool(bool value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteFloat(float value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteDouble(double value)
|
|||
|
|
{
|
|||
|
|
byte[] data = BitConverter.GetBytes(value);
|
|||
|
|
m_Stream.Write(data, 0, data.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteU8String(string value)
|
|||
|
|
{
|
|||
|
|
byte[] data = Encoding.UTF8.GetBytes(value);
|
|||
|
|
|
|||
|
|
byte length = 0xFF;
|
|||
|
|
if (data.Length < length)
|
|||
|
|
length = (byte)data.Length;
|
|||
|
|
|
|||
|
|
m_Stream.WriteByte(length);
|
|||
|
|
m_Stream.Write(data, 0, length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteU16String(string value)
|
|||
|
|
{
|
|||
|
|
byte[] data = Encoding.UTF8.GetBytes(value);
|
|||
|
|
|
|||
|
|
ushort length = 0xFFFF;
|
|||
|
|
if (data.Length < length)
|
|||
|
|
length = (ushort)data.Length;
|
|||
|
|
|
|||
|
|
WriteUShort(length);
|
|||
|
|
m_Stream.Write(data, 0, length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteBuffer(byte[] value)
|
|||
|
|
{
|
|||
|
|
m_Stream.Write(value, 0, value.Length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void WriteBuffer(byte[] value, int nLength)
|
|||
|
|
{
|
|||
|
|
m_Stream.Write(value, 0, nLength);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|