`
wgcode
  • 浏览: 593613 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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各种文件的格式来进行编码与解码,仅仅一个类并做不了什么。但先对整个类有个整体的了解也是好的。

分享到:
评论

相关推荐

    Flex 与 Struts2 ByteArray 数据上传

    在描述中提到的博客链接虽然没有提供具体内容,但通常博主会详细介绍如何在Flex中封装ByteArray并发送到Struts2的Action,以及Struts2如何接收和处理这些二进制数据。通常,这种上传涉及到的数据类型可能是图像、PDF...

    通过ByteArray来播放MP3

    ### 通过ByteArray播放MP3的方法解析 在Adobe Flash平台中,使用`ByteArray`来加载并播放MP3文件是一项常见的需求,尤其是在需要动态加载音频资源的应用场景下。本文将详细介绍如何利用ActionScript 3 (AS3) 语言...

    一个基于C# 实现的Image与Byte Array进行相互转换的Class类库源码及例子程序

    本篇将详细介绍如何使用C#实现Image与Byte Array之间的转换,并基于提供的类库源码进行解析。 首先,`ImageConverter.cs` 文件很可能包含了实现这两个转换的核心代码。在这个类库中,通常会有一个名为 `...

    FLEX代码,图片调用

    本文将深入探讨Flex中图片调用的几种方法,并重点介绍一种特殊的方法——通过`ByteArray`方式将图片编译进SWF文件中,使得SWF文件能够独立存在。 #### 图片调用方法概述 在Flex中,常见的图片加载方式主要包括: ...

    activiti 工作流23张表详细介绍

    ### Activiti工作流23张表详细介绍 #### 一、Activiti数据库表结构概述 Activiti是一款开源的工作流引擎,其强大的流程管理能力使得它在众多业务场景中得到广泛应用。为了更好地理解Activiti如何存储流程数据,本...

    Activiti数据库表结构介绍

    Activiti数据库表结构介绍 Activiti是一个流程引擎,用于管理和执行业务流程。为了存储和管理流程相关数据,Activiti使用了多个数据库表来实现。这篇文章将简要概括Activiti数据库表结构,对于初入Activiti的同学来...

    qbytearrayqbytearray.docx

    除了上述介绍的功能外,`QByteArray`还提供了更多的方法和操作符,例如: - **比较**:`==` 和 `!=` 操作符可以用来比较两个`QByteArray`对象。 - **搜索**:`indexOf()` 和 `lastIndexOf()` 方法可以用来查找特定...

    详解Java中ByteArray字节数组的输入输出流的用法

    ByteArrayInputStream和ByteArrayOutputStream是Java IO体系中两个非常实用的类,它们分别用于处理字节数组的输入和输出。 **ByteArrayInputStream介绍** ByteArrayInputStream是InputStream的子类,它允许我们将...

    webgame客户端通信VO设计构想

    本文提出了一套针对Webgame客户端通信VO的设计方案,通过对父类Message、通信连接类Connection、VO身份识别配置类VOIdentifyMap以及Socket命令类SocketCommands的详细介绍,旨在为Webgame开发者提供一种高效、可靠的...

    flash调用摄像头拍照和上传的学习地址

    通过以上介绍,我们可以看出,在Flash中实现摄像头拍照和上传功能需要综合运用Camera类、NetStream类、BitmapData类以及URLRequest类等多个组件。虽然随着HTML5和WebGL技术的发展,Flash的应用场景逐渐减少,但了解...

    httpRequest

    根据给定的信息,本文将对`HttpHelps`类进行详细的解析,并重点介绍其实现HTTP访问的方法、原理以及具体的代码实现细节。 ### HttpHelps 类概述 `HttpHelps` 类是一个封装了HTTP请求功能的类,它支持通过POST或GET...

    AMF3 format

    ByteArray 类、IDataInput 接口和 IDataOutput 接口是 ActionScript 3.0 中处理二进制数据的核心组件。AMF3 提供了一种有效的方式来将数据编码为 ByteArray,然后通过 IDataInput 或 IDataOutput 接口进行读取或写入...

    将字节数组转换为各种基本类型

    下面将详细介绍这一主题,以及如何在C#中进行这些转换。 1. 字节数组的基础 字节数组(byte[])是.NET框架中用于存储原始二进制数据的容器。它们通常用于读写文件、网络传输或处理二进制数据流。在C#中,我们可以...

    winform程序向web页面交互

    本文将详细介绍如何使用`HttpWebRequest`进行GET和POST操作,以及在WinForm程序中实现这些功能的步骤。 首先,了解HTTP协议的基础知识至关重要。HTTP是超文本传输协议,是互联网上应用最为广泛的一种网络协议,主要...

    flash media server 4 帮助文档

    - `ByteArray` 类用于处理二进制数据。 - 它提供了读写原始数据的能力,这对于处理多媒体数据非常有用。 4. **Client Class** - `Client` 类用于代表连接到服务器的客户端。 - 可以通过这个类来发送消息或数据...

    【QT】自定义协议解决TCP粘包和拆包问题

    本文将详细介绍如何使用QT来设计一个自定义协议,以解决TCP粘包和拆包的问题。 首先,我们需要理解TCP粘包和拆包的原因。TCP为了提高传输效率,会将较小的数据包合并成一个大包发送,或者将一个大的数据包拆分成多...

    android bitmap通过byte数组以流的形式创建

    本篇文章将详细介绍如何通过byte数组以流的形式创建Bitmap,并且结合进度条实现更友好的用户体验。 首先,理解Bitmap的创建方式。Bitmap可以使用多种方法创建,如直接从资源、文件或网络加载。在处理大量数据时,如...

    利用httpwebrequest 登陆网站保存COOKIE,实现手机属地查询

    本教程将介绍如何使用HttpWebRequest来登录网站并保存Cookie,从而实现手机归属地的查询功能。 首先,我们需要理解HttpWebRequest类是.NET Framework提供的一个强大工具,它允许我们发送HTTP请求到服务器,并获取...

    flash as3录音功能(不用借助fms)

    然而,本教程将介绍一种方法,让你能够实现在客户端本地进行录音,而无需依赖FMS或其他服务器组件。这使得应用更具灵活性,用户可以直接保存录音文件至他们选择的计算机目录。 首先,AS3中的录音涉及到的声音处理...

    VB.NET编写的压缩与解压函数

    本篇文章将详细介绍如何使用VB.NET实现自定义的数据压缩与解压功能。 #### 二、压缩与解压函数的实现 根据提供的代码片段,可以看到作者实现了两个主要的函数:`A_pCompressByte` 和 `A_pDeCompressByte`。这两个...

Global site tag (gtag.js) - Google Analytics