完成以下功能:
- 只针对内存字节流的读写,主要应用于数据的解析和写入。
- 提供不同数据类型的读写接口,包括byte,short,int,float,string等。
- 处理了大小端数据转换的问题,所以可用于网络数据的解析和发送。
using System.IO; using System.Net; using System; namespace Framework { public class NetStream { private MemoryStream stream; private BinaryReader reader; private BinaryWriter writer; public NetStream(byte[] buffer = null) { if (buffer == null) { this.stream = new MemoryStream(); } else { this.stream = new MemoryStream(buffer); } this.reader = new BinaryReader(this.stream); this.writer = new BinaryWriter(this.stream); } public void Close() { this.stream.Close(); this.reader.Close(); this.writer.Close(); } //------------------------------------------------------------------------------- public long ReadInt64() { return IPAddress.HostToNetworkOrder(this.reader.ReadInt64()); } public int ReadInt32() { return IPAddress.HostToNetworkOrder(this.reader.ReadInt32()); } public short ReadInt16() { return IPAddress.HostToNetworkOrder(this.reader.ReadInt16()); } public byte ReadByte() { return this.reader.ReadByte(); } public float ReadFloat() { return this.reader.ReadSingle(); } public string ReadString8() { return System.Text.Encoding.UTF8.GetString(this.reader.ReadBytes(ReadByte())); } public string ReadString16() { return System.Text.Encoding.UTF8.GetString(this.reader.ReadBytes(ReadInt16())); } public long Seek(long offset) { return this.stream.Seek(offset, SeekOrigin.Begin); } //------------------------------------------------------------------------------- public void WriteByte(byte value) { this.writer.Write(value); } public void WriteInt16(short value) { this.writer.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(value))); } public void WriteInt32(int value) { this.writer.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(value))); } public void WriteInt64(long value) { this.writer.Write(BitConverter.GetBytes(IPAddress.HostToNetworkOrder(value))); } public void WriteFloat(float value) { this.writer.Write(value); } public void WriteString8(string value) { byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(value); WriteByte((byte) byteArray.Length); this.writer.Write(byteArray); } public void WriteString16(string value) { byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(value); WriteInt16((short) byteArray.Length); this.writer.Write(byteArray); } public byte[] GetBuffer() { return this.stream.ToArray(); } public int GetLength() { return (int) this.stream.Length; } } }