美文网首页
MemoryStream内存数据读写_悠游课堂_Unity视频教

MemoryStream内存数据读写_悠游课堂_Unity视频教

作者: 至少还有光 | 来源:发表于2019-11-15 19:53 被阅读0次

1.内存读写原理 字节转换

电脑中最基本的单位是“位”(bit),但“位”这个单位太小,所以字节(byte)是电脑存储容量的基本计量单位。Byte可简写为B,一个字节由八个二进制单位组成,其最小值为0,最大值为11111111(8个1),一个存储单元能存储一个字节的内容。

字节转换 int转换byte(int:四个字节,long:8个字节),以下仅厕所int转换byte,long转换byte请自行测试

        int i = 981111;

        byte[] temp = BitConverter.GetBytes(i);

        for (int j = 0; j < temp.Length; j++)

        {

            Debug.Log(j + "  => " + temp[j]);

        }

结果

byte数组转换int

2.编写内存读写类,(short int long float decimal bool string)和byte的互相转换



using UnityEngine;

using System.Collections;

using System.IO;

using System;

using System.Text;

/// <summary>

/// 数据转换(byte short int long float decimal bool string)

/// </summary>

public class MMO_MemoryStream : MemoryStream

{

    public MMO_MemoryStream()

    {

    }

    public MMO_MemoryStream(byte[] buffer) : base(buffer)

    {

    }

    #region Short

    /// <summary>

    /// 从流中读取一个short数据

    /// </summary>

    /// <returns></returns>

    public short ReadShort()

    {

        byte[] arr = new byte[2];

        base.Read(arr, 0, 2);

        return BitConverter.ToInt16(arr, 0);

    }

    /// <summary>

    /// 把一个short数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteShort(short value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region UShort

    /// <summary>

    /// 从流中读取一个ushort数据

    /// </summary>

    /// <returns></returns>

    public ushort ReadUShort()

    {

        byte[] arr = new byte[2];

        base.Read(arr, 0, 2);

        return BitConverter.ToUInt16(arr, 0);

    }

    /// <summary>

    /// 把一个ushort数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteUShort(ushort value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region Int

    /// <summary>

    /// 从流中读取一个int数据

    /// </summary>

    /// <returns></returns>

    public int ReadInt()

    {

        byte[] arr = new byte[4];

        base.Read(arr, 0, 4);

        return BitConverter.ToInt32(arr, 0);

    }

    /// <summary>

    /// 把一个int数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteInt(int value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region UInt

    /// <summary>

    /// 从流中读取一个uint数据

    /// </summary>

    /// <returns></returns>

    public uint ReadUInt()

    {

        byte[] arr = new byte[4];

        base.Read(arr, 0, 4);

        return BitConverter.ToUInt32(arr, 0);

    }

    /// <summary>

    /// 把一个uint数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteUInt(uint value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region Long

    /// <summary>

    /// 从流中读取一个long数据

    /// </summary>

    /// <returns></returns>

    public long ReadLong()

    {

        byte[] arr = new byte[8];

        base.Read(arr, 0, 8);

        return BitConverter.ToInt64(arr, 0);

    }

    /// <summary>

    /// 把一个long数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteLong(long value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region ULong

    /// <summary>

    /// 从流中读取一个ulong数据

    /// </summary>

    /// <returns></returns>

    public ulong ReadULong()

    {

        byte[] arr = new byte[4];

        base.Read(arr, 0, 4);

        return BitConverter.ToUInt64(arr, 0);

    }

    /// <summary>

    /// 把一个ulong数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteULong(ulong value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region Float

    /// <summary>

    /// 从流中读取一个float数据

    /// </summary>

    /// <returns></returns>

    public float ReadFloat()

    {

        byte[] arr = new byte[4];

        base.Read(arr, 0, 4);

        return BitConverter.ToSingle(arr, 0);

    }

    /// <summary>

    /// 把一个float数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteFloat(float value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region Double

    /// <summary>

    /// 从流中读取一个double数据

    /// </summary>

    /// <returns></returns>

    public double ReadDouble()

    {

        byte[] arr = new byte[8];

        base.Read(arr, 0, 8);

        return BitConverter.ToDouble(arr, 0);

    }

    /// <summary>

    /// 把一个double数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteDouble(double value)

    {

        byte[] arr = BitConverter.GetBytes(value);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

    #region Bool

    /// <summary>

    /// 从流中读取一个bool数据

    /// </summary>

    /// <returns></returns>

    public bool ReadBool()

    {

        return base.ReadByte() == 1;

    }

    /// <summary>

    /// 把一个bool数据写入流

    /// </summary>

    /// <param name="value"></param>

    public void WriteBool(bool value)

    {

        base.WriteByte((byte)(value == true ? 1 : 0));

    }

    #endregion

    #region UTF8String

    /// <summary>

    /// 从流中读取一个sting数组

    /// </summary>

    /// <returns></returns>

    public string ReadUTF8String()

    {

        ushort len = this.ReadUShort();

        byte[] arr = new byte[len];

        base.Read(arr, 0, len);

        return Encoding.UTF8.GetString(arr);

    }

    /// <summary>

    /// 把一个string数据写入流

    /// </summary>

    /// <param name="str"></param>

    public void WriteUTF8String(string str)

    {

        byte[] arr = Encoding.UTF8.GetBytes(str);

        if (arr.Length > 65535)

        {

            throw new InvalidCastException("字符串超出范围");

        }

        WriteUShort((ushort)arr.Length);

        base.Write(arr, 0, arr.Length);

    }

    #endregion

}

相关文章

网友评论

      本文标题:MemoryStream内存数据读写_悠游课堂_Unity视频教

      本文链接:https://www.haomeiwen.com/subject/hygsictx.html