using System;
using System.IO;

public class ByteArray
{
    MemoryStream ms = new MemoryStream();
    BinaryReader br;
    BinaryWriter bw;
    public ByteArray()
    {
        bw = new BinaryWriter(ms);
        br = new BinaryReader(ms);
    }

    public ByteArray(byte[] buff)
    {
        ms = new MemoryStream(buff);
        br = new BinaryReader(ms);
        bw = new BinaryWriter(ms);
    }


    #region  读取消息
    public void Read(out int vaule)
    {
        vaule = br.ReadInt32();
    }
    public void Read(out byte value)
    {
        value = br.ReadByte();
    }
    public void Read(out byte[] vaule, int length)
    {
        vaule = br.ReadBytes(length);
    }
    public void Read(out bool value)
    {
        value = br.ReadBoolean();
    }
    public void Read(out string value)
    {
        value = br.ReadString();
    }
    public void Read(out long value)
    {
        value = br.ReadInt64();
    }
    public void Read(out double value)
    {
        value = br.ReadDouble();
    }
    public void Read(out float value)
    {
        value = br.ReadSingle();
    }
    #endregion

    #region 编写消息
    public void Write(int value)
    {
        bw.Write(value);
    }
    public void Write(byte value)
    {
        bw.Write(value);
    }
    public void Write(bool value)
    {
        bw.Write(value);
    }
    public void Write(byte[] value)
    {
        bw.Write(value);
    }
    public void Write(string value)
    {
        bw.Write(value);
    }
    public void Write(long value)
    {
        bw.Write(value);
    }
    public void Write(double value)
    {
        bw.Write(value);
    }
    public void Write(float value)
    {
        bw.Write(value);
    }

    #endregion


    public int Length
    {
        get
        {
            return (int)ms.Length;
        }
    }
    public int Position
    {
        get
        {
            return (int)ms.Position;
        }
    }

    /// <summary>
    /// 是否读取完了
    /// </summary>
    public bool ReadOver
    {
        get
        {
            if (Position < Length)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    /// <summary>
    /// 关闭读写
    /// </summary>
    public void Close()
    {
        br.Close();
        bw.Close();
        ms.Close();
    }

    public byte[] GetBuffer()
    {
        byte[] result = new byte[ms.Length];
        Buffer.BlockCopy(ms.GetBuffer(), 0, result, 0, (int)ms.Length);
        return result;
    }
}