原地址:http://www.unity蛮牛.com/blog-1801-799.html

 

ByteArrary(优化数据存储和数据流)

分类:unity3D学习篇 评论:1 条 阅读:336 次 2014-6-2 22:58

[code]csharpcode:

001 public class ByteArray
002 {
003     private MemoryStream m_Stream = new MemoryStream();
004     private BinaryReader m_Reader = null;
005     private BinaryWriter m_Writer = null;
006  
007     public ByteArray()
008     {
009         Init();
010     }
011  
012     public ByteArray(MemoryStream ms)
013     {
014         m_Stream = ms;
015         Init();
016     }
017  
018     public ByteArray(byte[] buffer)
019     {
020         m_Stream = new MemoryStream(buffer);
021         Init();
022     }
023  
024     private void Init()
025     {
026         m_Writer = new BinaryWriter(m_Stream);
027         m_Reader = new BinaryReader(m_Stream);
028     }
029  
030     public int Length
031     {
032         get { return (int)m_Stream.Length; }
033     }
034  
035     public int Postion
036     {
037         get { return (int)m_Stream.Position; }
038         set { m_Stream.Position = value; }
039     }
040  
041     public byte[] Buffer
042     {
043         get { return m_Stream.GetBuffer(); }
044     }
045  
046     internal MemoryStream MemoryStream { get { return m_Stream; } }
047  
048     public bool ReadBoolean()
049     {
050         return m_Reader.ReadBoolean();
051     }
052  
053     public byte ReadByte()
054     {
055         return m_Reader.ReadByte();
056     }
057  
058     public void ReadBytes(byte[] bytes, uint offset, uint length)
059     {
060         byte[] tmp = m_Reader.ReadBytes((int)length);
061         for (int i = 0; i < tmp.Length; i++)
062             bytes[i + offset] = tmp[i];
063         //m_Reader.ReadBytes(bytes, offset, length);
064     }
065  
066     public double ReadDouble()
067     {
068         return m_Reader.ReadDouble();
069     }
070  
071     public float ReadFloat()
072     {
073         byte[] bytes = m_Reader.ReadBytes(4);
074         byte[] invertedBytes = new byte[4];
075         //Grab the bytes in reverse order from the backwards index
076         for (int i = 3, j = 0; i >= 0; i--, j++)
077         {
078             invertedBytes[j] = bytes[i];
079         }
080         float value = BitConverter.ToSingle(invertedBytes, 0);
081         return value;
082  
083         // return m_Reader.ReadFloat();
084     }
085  
086     public int ReadInt()
087     {
088         return m_Reader.ReadInt32();
089     }
090  
091     public short ReadShort()
092     {
093         return m_Reader.ReadInt16();
094     }
095  
096     public byte ReadUnsignedByte()
097     {
098         return m_Reader.ReadByte();
099     }
100  
101     public uint ReadUnsignedInt()
102     {
103         return (uint)m_Reader.ReadInt32();
104     }
105  
106     public ushort ReadUnsignedShort()
107     {
108         return m_Reader.ReadUInt16();
109     }
110  
111     public string ReadUTF()
112     {
113         return m_Reader.ReadString();
114     }
115  
116     public string ReadUTFBytes(uint length)
117     {
118         if (length == 0)
119             return string.Empty;
120         UTF8Encoding utf8 = new UTF8Encoding(false, true);
121         byte[] encodedBytes = m_Reader.ReadBytes((int)length);
122         string decodedString = utf8.GetString(encodedBytes, 0, encodedBytes.Length);
123         return decodedString;
124     }
125  
126     public void WriteBoolean(bool value)
127     {
128         m_Writer.BaseStream.WriteByte(value ? ((byte)1) : ((byte)0));
129         // m_Writer.WriteBoolean(value);
130     }
131     public void WriteByte(byte value)
132     {
133         m_Writer.BaseStream.WriteByte(value);
134         // m_Writer.WriteByte(value);
135     }
136     public void WriteBytes(byte[] buffer)
137     {
138         for (int i = 0; buffer != null && i < buffer.Length; i++)
139             m_Writer.BaseStream.WriteByte(buffer[i]);
140     }
141     public void WriteBytes(byte[] bytes, int offset, int length)
142     {
143         for (int i = offset; i < offset + length; i++)
144             m_Writer.BaseStream.WriteByte(bytes[i]);
145     }
146     public void WriteDouble(double value)
147     {
148         byte[] bytes = BitConverter.GetBytes(value);
149         WriteBigEndian(bytes);
150     }
151     public void WriteFloat(float value)
152     {
153         byte[] bytes = BitConverter.GetBytes(value);
154         WriteBigEndian(bytes);
155     }
156     private void WriteBigEndian(byte[] bytes)
157     {
158         if (bytes == null)
159             return;
160         for (int i = bytes.Length - 1; i >= 0; i--)
161         {
162             m_Writer.BaseStream.WriteByte(bytes[i]);
163         }
164     }
165  
166     public void WriteInt32(int value)
167     {
168         byte[] bytes = BitConverter.GetBytes(value);
169         WriteBigEndian(bytes);
170     }
171  
172     public void WriteInt(int value)
173     {
174         WriteInt32(value);
175     }
176  
177     public void WriteShort(int value)
178     {
179         byte[] bytes = BitConverter.GetBytes((ushort)value);
180         WriteBigEndian(bytes);
181     }
182  
183     public void WriteUnsignedInt(uint value)
184     {
185         WriteInt32((int)value);
186     }
187  
188     public void WriteUTF(string value)
189     {
190         UTF8Encoding utf8Encoding = new UTF8Encoding();
191         int byteCount = utf8Encoding.GetByteCount(value);
192         byte[] buffer = utf8Encoding.GetBytes(value);
193         WriteShort(byteCount);
194         if (buffer.Length > 0)
195             m_Writer.Write(buffer);
196     }
197  
198     public void WriteUTFBytes(string value)
199     {
200         UTF8Encoding utf8Encoding = new UTF8Encoding();
201         byte[] buffer = utf8Encoding.GetBytes(value);
202         if (buffer.Length > 0)
203             m_Writer.Write(buffer);
204     }
205  
206     public void WriteStringBytes(string value)
207     {
208         UTF8Encoding utf8Encoding = new UTF8Encoding();
209         byte[] buffer = utf8Encoding.GetBytes(value);
210         if (buffer.Length > 0)
211         {
212             m_Writer.Write(buffer.Length);
213             m_Writer.Write(buffer);
214         }
215     }
216 }
今天看了A神的那个RPG教程,里面有一个类是ByteArray,在网上找了应该是个累死优化数据存储和数据流的一个类 ,在网上找了一下前辈们写的教程拿到这里与大家分享一下
 
 
ByteArray() 
创建一个表示填充的字节数组的 ByteArray 实例,以便使用此类中的方法和属性来优化数据存储和数据流。 ByteArray 
compress(algorithm:String):void 
压缩字节数组。 ByteArray 
hasOwnProperty(name:String):Boolean 
指示对象是否已经定义了指定的属性。 Object 
isPrototypeOf(theClass:Object):Boolean 
指示 Object 类的实例是否在指定为参数的对象的原型链中。 Object 
propertyIsEnumerable(name:String):Boolean 
指示指定的属性是否存在、是否可枚举。 Object 
readBoolean():Boolean 
从字节流中读取布尔值。 ByteArray 
readByte():int 
从字节流中读取带符号的字节。 ByteArray 
readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 
从字节流中读取 length 参数指定的数据字节数。 ByteArray 
readDouble():Number 
从字节流中读取一个 IEEE 754 双精度(64 位)浮点数。 ByteArray 
readFloat():Number 
从字节流中读取一个 IEEE 754 单精度(32 位)浮点数。 ByteArray 
readInt():int 
从字节流中读取一个带符号的 32 位整数。 ByteArray 
readMultiByte(length:uint, charSet:String):String 
使用指定的字符集从字节流中读取指定长度的多字节字符串。 ByteArray 
readObject():* 
从字节数组中读取一个以 AMF 序列化格式进行编码的对象。 ByteArray 
readShort():int 
从字节流中读取一个带符号的 16 位整数。 ByteArray 
readUnsignedByte():uint 
从字节流中读取无符号的字节。 ByteArray 
readUnsignedInt():uint 
从字节流中读取一个无符号的 32 位整数。 ByteArray 
readUnsignedShort():uint 
从字节流中读取一个无符号的 16 位整数。 ByteArray 
readUTF():String 
从字节流中读取一个 UTF-8 字符串。 ByteArray 
readUTFBytes(length:uint):String 
从字节流中读取一个由 length 参数指定的 UTF-8 字节序列,并返回一个字符串。 ByteArray 
setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void 
设置循环操作动态属性的可用性。 Object 
toString():String 
将字节数组转换为字符串。 ByteArray 
uncompress(algorithm:String):void 
解压缩字节数组。 ByteArray 
valueOf():Object 
返回指定对象的原始值。 Object 
writeBoolean(value:Boolean):void 
写入布尔值。 ByteArray 
writeByte(value:int):void 
在字节流中写入一个字节。 ByteArray 
writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 
将指定字节数组 bytes(起始偏移量为 bytes,从 0 开始的索引)中包含 length 个字节的字节序列写入字节流。 ByteArray 
writeDouble(value:Number):void 
在字节流中写入一个 IEEE 754 双精度(64 位)浮点数。 ByteArray 
writeFloat(value:Number):void 
在字节流中写入一个 IEEE 754 单精度(32 位)浮点数。 ByteArray 
writeInt(value:int):void 
在字节流中写入一个带符号的 32 位整数。 ByteArray 
writeMultiByte(value:String, charSet:String):void 
使用指定的字符集将多字节字符串写入字节流。 ByteArray 
writeObject(object:*):void 
将对象以 AMF 序列化格式写入字节数组。 ByteArray 
writeShort(value:int):void 
在字节流中写入一个 16 位整数。 ByteArray 
writeUnsignedInt(value:uint):void 
在字节流中写入一个无符号的 32 位整数。 ByteArray 
writeUTF(value:String):void 
将 UTF-8 字符串写入字节流。 ByteArray 
writeUTFBytes(value:String):void 
将 UTF-8 字符串写入字节流。 ByteArray

ByteArrary(优化数据存储和数据流)的更多相关文章

  1. 0809MySQL实战系列:大字段如何优化|数据存储结构

    转自https://yq.aliyun.com/articles/59256?spm=5176.100239.blogcont59257.9.5MLR2d 摘要: 背景 线上发现一张表,1亿的数据量, ...

  2. 移动互联网实战--资源类APP的数据存储处理和优化

    前言: 对于资源类的APP, 其音频/图形占据了APP本身很大的比例. 如何存储和管理这些资源文件, 成了一个颇具挑战性的难点. 移动端的碎片化, 高中低端手机的并存, 需要开发者不光是具备基础的存储 ...

  3. 性能优化之数据存储&DOM编程

    多读书多看报 数据存储 ·在javascript中,数据存储的位置会对代码整体性能产生重大的影响. ·数据存储共有4种方式:字面量.变量.数组.对象成员.   ·要理解变量的访问速度,就要理解作用域. ...

  4. Redis数据存储优化机制(转)

    原文:Redis学习笔记4--Redis数据存储优化机制 1.zipmap优化hash: 前面谈到将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象.省内存的原因是新建一个h ...

  5. TI C6000 数据存储处理与性能优化

    存储器之于CPU好比仓库之于车间.车间加工过程中的原材料.半成品.成品等均需入出仓库,生产效率再快,如果仓库周转不善,也必然造成生产阻塞.如同仓库需要合理地规划管理一般,数据存储也需要恰当的处理技巧来 ...

  6. In-Memory:内存优化数据的持久化和还原

    数据持久化是还原的前提,没有数据的持久化,就无法还原内存优化表的数据,SQL Server In-Memory OLTP的内存数据能够持久化存储,这意味着内存数据能够在SQL Server实例重启之后 ...

  7. LabVIEW(四):数据存储和文件IO

    1.使用NI数据采集板卡来进行数据保存和文件I/O操作.2.在一个典型的测试测量系统当中,包括:信号调理.信号采集.信号分析.信号显示.数据存储.数据存储:将采集到的数据储存到磁盘上,以备日后离线分析 ...

  8. BigData NoSQL —— ApsaraDB HBase数据存储与分析平台概览

    一.引言 时间到了2019年,数据库也发展到了一个新的拐点,有三个明显的趋势: 越来越多的数据库会做云原生(CloudNative),会不断利用新的硬件及云本身的优势打造CloudNative数据库, ...

  9. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...

随机推荐

  1. WCF之并发,吞吐量和限流

    并发 Single重入模式.对于每一个服务实例,同一时刻只能处理一个请求,其他对该实例的请求被排队. PerCall,每一线程会分配一个新的服务实例上.不会有并发性问题.不影响吞吐量. PerSess ...

  2. 7款纯CSS3实现的炫酷动画应用

    1.纯CSS3实现人物摇头动画 这次我们要来分享一款超级可爱的纯CSS3人物摇头动画,初始化的时候人物的各个部位是利用CSS3动画效果拼接而成,接下来就是人物听音乐的场景,一边听音乐一边摇着脑袋,十分 ...

  3. java集合(交集,并集,差集)

    说明:这里没有求差集的代码,有了交集和并集,差集=并集-交集       package com; import java.util.ArrayList; import java.util.HashS ...

  4. C#调用C、C++结构体数组的方法总结

    一个客户要使用C#调用我们用C++开发的一个动态链接库,本来我没有C#的开发经验,就随便写了一个例程.以为很简单就可以搞定,没想到客户开发的过程中遇到了不少问题,最困难的就是用C#调用C++接口中的自 ...

  5. Firefox 与 IE 对Javascript和CSS的区别

    1. document.formName.item("itemName") 问题 说明:IE下,可以使用document.formName.item("itemName& ...

  6. 在 linux x86-32 模式下分析内存映射流程

    前言 虚拟内存机制已经成为了现代操作系统所不可缺少的一部分, 不仅可以为每个程序提供独立的地址空间保证安全性,更可以通过和磁盘的内存交换来提高内存的使用效率.虚拟内存管理作为linux 上的重要组成部 ...

  7. IP进制站群原理

    百度搜索:“inurl:0×00”,会发现全是以八进制.十六进制形式显示的域名(如下图),当点击后,浏览器会自动将这些域名转换为十进制的ip.这种方式在黑帽圈目前挺火爆的,用于做长尾词排名,可以带来可 ...

  8. GGS: Sybase to Oracle

    Step 1: Start the GGSCI on Source and Target Source Target Oracle GoldenGate Command Interpreter for ...

  9. centos Supervisor

    Supervisor是一个进程监控程序. 满足的需求是:我现在有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...

  10. iOS中使用自定义字体

    1.确定你的项目工程的Resources下有你要用的字体文件(.ttf或者.odf). 2.然后在你的工程的Info.plist文件中新建一行,添加key为:UIAppFonts,类型为Array或D ...