您的位置:首页 > 编程语言 > C#

C# 二进制字节流读写封装

2017-05-16 19:41 309 查看
完成以下功能:

只针对内存字节流的读写,主要应用于数据的解析和写入。
提供不同数据类型的读写接口,包括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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: