zoukankan      html  css  js  c++  java
  • ByteArray(摘)

    在AS3中另外一个比较涉及底层操作的类是二进制类ByteArray。这个类管理了一系列二进制数据。可以达到在字节层上的控制。二进制数据在网络传输时虽然在工作效率下有所下降,但却是最节省网络带宽的传输方式。

    一,简介:

    ByteArray输入flash.util包,直接继承自Object对象。具有6个公共属性和33个公共方法。其中大部分是不同数据类型的写入和读取write&read。对ByteArray的操作是基于一个指针position的。

    二,公共属性:

    1,可用字节数(数组长度)

    bytesAvailable : uint

    一个只读属性,返回了当前指针position到ByteArray末尾的可读数据长度,避免了读取超出范围的数据而造成的Error。

    2,二进制数据格式

    defaultObjectEncoding : uint

    是一个静态变量,定义了ByteArray的写入或读取数据时使用的格式。通常使用ObjectEncoding来设置,具有三个值AMF0(以AS1,AS2格式序列化对象),AMF3(以AS3格式序列化对象),DEFAULT(按FlashPlayer默认最新的格式序列化对象)。

    3,写入字节的顺序

    endian : String

    也是一个静态变量,定义了字节的顺序。通常使用Endian类设置,具有两个值BIG_ENDIAN(最高有效字节位于字节序列的最前面)和LITTLE_ENDIAN(最低有效字节位于最前),这个主要用于跟服务器端匹配即可。

    4,ByteArray长度

    length : uint

    ByteArray的总长度,以字节为单位。

    5,读取格式

    objectEncoding : uint

    这个就是之前提到的数据写入或读取ByteArray使用的格式,主要还是分AS1,AS2写入还是AS3写入。使用ObjectEncoding来设置。

    6,指针位置

    position : uint

    移动当前读取到ByteArray的位置。

    三,公共方法:

    其中大部分都是读写方法READ/WRITE,其中READ方法14个,WRITE方法12个(竟然不相同?到时要好好注意)。剩余7个其他方法。

    1,构造函数

    ByteArray()

    没什么特别的,连参数都没有··囧

    2,清除

    clear():void

    清楚ByteArray占用的内存。将长度和position设为0.

    3,压缩方法A

    compress(algorithm:String):void

    参数是一个String类型,通过flash.util.CompressionAlgorithm定义。压缩之后数组变为新长度,position跳到ByteArray末尾。FlashPlayer中运行不能传参数,默认为zlib压缩算法。

    4,压缩方法B(AIR only)

    deflate():void

    另外一种压缩方法,使用的是deflate算法(天知道是什么算法)。压缩之后数组变为新长度,position跳到ByteArray末尾。

    5,压缩方法A解压方法

    uncompress(algorithm:String):void

    解压算法要与压缩算法相对应。FlashPlayer中运行不能传参数,默认为zlib压缩算法。压缩之后数组变为新长度,position跳到ByteArray开头。

    6,压缩方法B解压方法(AIR only)

    inflate():void

    解压通过deflate方法压缩过的ByteArray。压缩之后数组变为新长度,position跳到ByteArray开头。

    7,转为字符转方法

    toString():String

    将ByteArray转化为字符串形似。

    接下来就是成对出现的READ/WRITE方法,要注意指针position的位置变化,当位置不足以读取时会引发EOError。

    8,读取Boolen值。

    readBoolean():Boolean

    读取一个字节,当字节不为0时返回true,字节为0时返回false。

    9,写入Boolen值。

    writeBoolean(value:Boolean):void

    当value为true时写入1,当value为false时写入0。

    10,读取带符号字节

    readByte():int

    返回值在-128~127之间,即256个范围(一个字节为8位2进制位)。

    11,写入带符号字节

    writeByte(value:int):void

    参数是一个32位的int整数,只有低8位才会被写入。高24位被忽略。

    12,读取字节

    readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void

    第一个参数是将读取出的字节写入第一个参数指定的ByteArray对象中。

    后两个即指针position的偏移位置,以及读取的长度(0为从position位置开始全部读取)。

    13,写入字节

    writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void

    从指定的ByteArray对象bytes中读取一定长度的字节流,写回ByteArray中。

    后两个参数定义了位置。

    14,读取64位浮点数

    readDouble():Number

    就是读取一个双精度64位的带小数的浮点数(好绕口,浮点数就是带小数点的意思啊)

    15,写入64位浮点数

    writeDouble(value:Number):void

    将一个64位浮点数写入ByteArray

    16,读取32位浮点数

    readFloat():Number

    读取一个单精度32位的浮点数

    17,写入32位浮点数

    writeFloat(value:Number):void

    将一个32位浮点数写入ByteArray

    18,读取带符号整数

    readInt():int

    从字节流中读出32位带符号整数

    19,写入带符号整数

    writeInt(value:int):void

    将32位带符号整数写入ByteArray

    20,从字符集中读取字符串

    readMultiByte(length:uint, charSet:String):String

    这个字符集不太懂是什么意思,可选的值有"shift-jis","cn-gb"等

    21,将多字节按指定字符集形式写入ByteArray

    writeMultiByte(value:String, charSet:String):void

    与上面的对应。

    22,读取对象

    readObject():*

    从ByteArray中按AMF格式读取一个对象OBJECT

    23,写入对象

    writeObject(object:*):void

    将一个对象写入ByteArray中

    24,读取一个16位整数

    readShort():int

    从ByteArray中读取一个16位带符号的整数

    25,写入一个16位整数

    writeShort(value:int):void

    将一个整数int写入ByteArray中,忽略高16位。

    26,读取无符号字节

    readUnsignedByte():uint

    27,读取无符号16位整数

    readUnsignedShort():uint

    28,读取无符号32位整数

    readUnsignedInt():uint

    29,写入无符号32位整数

    writeUnsignedInt(value:uint):void

    30,读取一个UTF-8字符串

    readUTF():String

    31,写入一个UTF-8字符串

    writeUTF(value:String):void

    这个会写在ByteArray里写入一个字节表示字符串长度(16字节),然后再写入字符串

    32,读取指定长度的UTF-8字符串

    readUTFBytes(length:uint):String

    33,写入指定长度的UTF-8字符串

    writeUTFBytes(value:String):void

    与writeUTF很相似,但是不会自动生成1个字节保存字符串长度

    总结:

    任何对ByteArray的操作都会引起指针position的变化。其中共有13对读写方法,分别是:Boolen,Byte,Bytes,Double,Float,Int,MulitByte,Object,Short,UnsignInt,UTF,UTFBytes,另外还有2个单独读取的UnsignByte,UnsignShort。

    当然具体对ByteArray的操作还要GOOGLE各种文件的格式来进行编码与解码,仅仅一个类并做不了什么。但先对整个类有个整体的了解也是好的。

    **********************************************************************

    ByteArray 类提供用于优化读取、写入以及处理二进制数据的方法和属性。

    注意:ByteArray 类适用于需要在字节层访问数据的高级 ActionScript 开发人员。

    内存中的数据是一个压缩字节数组(数据类型的最紧凑表示形式),但可以使用标准 ActionScript [](数组访问)运算符来操作 ByteArray 类的实例。 也可以使用与 URLStream 和 Socket 类中的方法相类似的方法将它作为内存中的文件进行读取和写入。

    此外,还支持 zlib 压缩和解压缩,以及 Action Message Format (AMF) 对象序列化。

    ByteArray 类可能的用途包括:

    • 创建用以连接到服务器的自定义协议。
    • 编写自己的 URLEncoder/URLDecoder。
    • 编写自己的 AMF/Remoting 包。
    • 通过使用数据类型优化数据的大小。
  • 相关阅读:
    win7下virtualbox遇到的问题
    2.5年, 从0到阿里
    TCP/IP入门(4) --应用层
    TCP/IP入门(3) --传输层
    TCP/IP入门(2) --网络层
    TCP/IP入门(1) --链路层
    Socket编程实践(13) --UNIX域协议
    Socket编程实践(12) --UDP编程基础
    Socket编程实践(10) --select的限制与poll的使用
    Socket编程实践(9) --套接字IO超时设置方法
  • 原文地址:https://www.cnblogs.com/axyz/p/2158222.html
Copyright © 2011-2022 走看看