完成以下功能:
- 只针对内存字节流的读写,主要应用于数据的解析和写入。
- 提供不同数据类型的读写接口,包括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;
}
}
}