1. 程式人生 > >封裝位元組流(byte[])操作類 c#

封裝位元組流(byte[])操作類 c#

在網路通訊中,資料在網路傳輸的格式必須以位元組流的形式進行,因此需要我們對位元組流進行寫入和讀出的操作,下面將會封裝兩個類,用來將各種型別的資料寫入位元組流,和從位元組流中讀取各種型別的資料。如下讀取類:NetBufferReaderusing System; using System.IO; using System.Text;

namespace Tool {     class NetBufferReader {

        MemoryStream m_stream = null;         BinaryReader m_reader = null;

        ushort m_dataLength;

        public NetBufferReader(byte[] data) {             if(data != null) {                 m_stream = new MemoryStream(data);                 m_reader = new BinaryReader(m_stream);

                m_dataLength = ReadUShort();             }         }

        public byte ReadByte() {             return m_reader.ReadByte();         }

        public int ReadInt() {             return m_reader.ReadInt32();         }

        public uint ReadUInt() {             return m_reader.ReadUInt32();         }

        public short ReadShort() {             return m_reader.ReadInt16();         }

        public ushort ReadUShort() {             return m_reader.ReadUInt16();         }

        public long ReadLong() {             return m_reader.ReadInt64();         }

        public ulong ReadULong() {             return m_reader.ReadUInt64();         }

        public float ReadFloat() {             byte[] temp = BitConverter.GetBytes(m_reader.ReadSingle());             Array.Reverse(temp);             return BitConverter.ToSingle(temp, 0);         }

        public double ReadDouble() {             byte[] temp = BitConverter.GetBytes(m_reader.ReadDouble());             Array.Reverse(temp);             return BitConverter.ToDouble(temp, 0);         }

        public string ReadString() {             ushort len = ReadUShort();             byte[] buffer = new byte[len];             buffer = m_reader.ReadBytes(len);             return Encoding.UTF8.GetString(buffer);         }

        public byte[] ReadBytes() {             int len = ReadInt();             return m_reader.ReadBytes(len);         }

        public void Close() {             if(m_reader != null) {                 m_reader.Close();             }             if(m_stream != null) {                 m_stream.Close();             }             m_reader = null;             m_stream = null;         }     } }寫入類:NetBufferWriterusing System; using System.IO; using System.Text;

namespace Tool {     class NetBufferWriter {         MemoryStream m_stream = null;         BinaryWriter m_writer = null;

        int m_finishLength;         public int finishLength {             get { return m_finishLength; }         }

        public NetBufferWriter() {             m_finishLength = 0;             m_stream = new MemoryStream();             m_writer = new BinaryWriter(m_stream);         }

        public void WriteByte(byte v) {             m_writer.Write(v);         }

        public void WriteInt(int v) {             m_writer.Write(v);         }

        public void WriteUInt(uint v) {             m_writer.Write(v);         }

        public void WriteShort(short v) {             m_writer.Write(v);         }

        public void WriteUShort(ushort v) {             m_writer.Write(v);         }

        public void WriteLong(long v) {             m_writer.Write(v);         }

        public void WriteULong(ulong v) {             m_writer.Write(v);         }

        public void WriteFloat(float v) {             byte[] temp = BitConverter.GetBytes(v);             Array.Reverse(temp);             m_writer.Write(BitConverter.ToSingle(temp, 0));         }

        public void WriteDouble(double v) {             byte[] temp = BitConverter.GetBytes(v);             Array.Reverse(temp);             m_writer.Write(BitConverter.ToDouble(temp, 0));         }

        public void WriteString(string v) {             byte[] bytes = Encoding.UTF8.GetBytes(v);             m_writer.Write((ushort)bytes.Length);             m_writer.Write(bytes);         }

        public void WriteBytes(byte[] v) {             m_writer.Write(v.Length);             m_writer.Write(v);         }

        public byte[] ToBytes() {             m_writer.Flush();             return m_stream.ToArray();         }

        public void Close() {             m_writer.Close();             m_stream.Close();             m_writer = null;             m_stream = null;         }

        /// <summary>         /// 將已寫入的資料流,封裝成一個新的資料流(現有資料長度+現有資料)         /// 資料轉換,網路傳送需要兩部分資料,一是資料長度,二是主體資料         /// </summary>         public byte[] Finish() {             byte[] message = ToBytes();             MemoryStream ms = new MemoryStream();             ms.Position = 0;             BinaryWriter writer = new BinaryWriter(ms);             writer.Write((ushort)message.Length);             writer.Write(message);             writer.Flush();             byte[] result = ms.ToArray();             m_finishLength = result.Length;             return result;         }     } }

---------------------

本文來自 王王王渣渣 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/wangjiangrong/article/details/80844392?utm_source=copy