运行时版本: | AIR 1.0 Flash Player 9 |
ByteArray 类提供用于优化读取、写入以及处理二进制数据的方法和属性。
注意:ByteArray 类适用于需要在字节层访问数据的高级 开发人员。
内存中的数据是一个压缩字节数组(数据类型的最紧凑表示形式),但可以使用标准 []
(数组访问)运算符来操作 ByteArray 类的实例。也可以使用与 URLStream 和 Socket 类中的方法相类似的方法将它作为内存中的文件进行读取和写入。
此外,还支持 zlib 压缩和解压缩,以及 Action Message Format (AMF) 对象序列化。
ByteArray 类可能的用途包括:
- 创建用以连接到服务器的自定义协议。
- 编写自己的 URLEncoder/URLDecoder。
- 编写自己的 AMF/Remoting 包。
- 通过使用数据类型优化数据的大小。
-
在 Adobe® AIR™ 中处理从文件加载的二进制数据。
查看示例
bytesAvailable:uint
[只读 (read-only)]
运行时版本: | AIR 1.0 Flash Player 9 |
可从字节数组的当前位置到数组末尾读取的数据的字节数。
每次访问 ByteArray 对象时,将 bytesAvailable
属性与读取方法结合使用,以确保读取有效的数据。
实现 public function get bytesAvailable():uint
defaultObjectEncoding:uint
[读写]
运行时版本: | AIR 1.0 Flash Player 9 |
指示用于新 ByteArray 实例的 ByteArray 类的默认对象编码。在创建新的 ByteArray 实例时,该实例上的编码以 defaultObjectEncoding
的值开头。defaultObjectEncoding
属性被初始化为 ObjectEncoding.AMF3
。
将对象写入二进制数据或从中读取对象时,将使用 objectEncoding
值来确定应使用 ActionScript 3.0、ActionScript2.0 还是 ActionScript 1.0 格式。该值为 ObjectEncoding 类中的常数。
实现 public static function get defaultObjectEncoding():uint
public function set defaultObjectEncoding(value:uint):void
另请参见
endian:String
[读写]
运行时版本: | AIR 1.0 Flash Player 9 |
更改或读取数据的字节顺序;Endian.BIG_ENDIAN
或 Endian.LITTLE_ENDIAN
。
实现 public function get endian():String
public function set endian(value:String):void
另请参见
length:uint
[读写]
运行时版本: | AIR 1.0 Flash Player 9 |
ByteArray 对象的长度(以字节为单位)。
如果将长度设置为大于当前长度的值,该字节数组的右侧将用零填充。
如果将长度设置为小于当前长度的值,将会截断该字节数组。
实现 public function get length():uint
public function set length(value:uint):void
objectEncoding:uint
[读写]
运行时版本: | AIR 1.0 Flash Player 9 |
用于确定在写入或读取 ByteArray 实例时应使用 ActionScript 3.0、ActionScript 2.0 还是 ActionScript 1.0 格式。该值为 ObjectEncoding 类中的常数。
实现 public function get objectEncoding():uint
public function set objectEncoding(value:uint):void
另请参见
position:uint
[读写]
运行时版本: | AIR 1.0 Flash Player 9 |
将文件指针的当前位置(以字节为单位)移动或返回到 ByteArray 对象中。下一次调用读取方法时将在此位置开始读取,或者下一次调用写入方法时将在此位置开始写入。
实现 public function get position():uint
public function set position(value:uint):void
public function ByteArray()
运行时版本: | AIR 1.0 Flash Player 9 |
创建一个表示填充的字节数组的 ByteArray 实例,以便使用此类中的方法和属性来优化数据存储和数据流。
public function clear():void
运行时版本: | Flash Player 10, AIR 1.5 |
清除字节数组的内容,并将 length
和 position
属性重置为 0。显式调用此方法将释放 ByteArray 实例占用的内存。
public function compress(algorithm:String):void
压缩字节数组。将压缩整个字节数组。对于在 Adobe AIR 中运行的内容,可以通过传递一个值(在 CompressionAlgorithm 类中定义)作为 algorithm
参数来指定压缩算法。Flash Player 只支持默认的 zlib 算法。
在调用后,ByteArray 的 length
属性将设置为新长度。position
属性将设置为字节数组末尾。
http://www.ietf.org/rfc/rfc1950.txt 中介绍了 zlib 压缩的数据格式。
http://www.ietf.org/rfc/rfc1951.txt 中介绍了 deflate 压缩算法。
这种 deflate 压缩算法用于多种压缩格式,如 zlib、gzip、一些 zip 实现等。在使用这些压缩格式之一压缩数据时,除了存储原始数据的压缩版本之外,压缩格式数据(例如 .zip 文件)还包括元数据信息。举例来说,各种文件格式中包括的元数据的类型有文件名、文件修改日期/时间、原始文件大小、可选的注释、校验和数据等。
例如,在使用 zlib 算法压缩 ByteArray 时,将以特定的格式构建生成的 ByteArray。一些字节包含有关所压缩数据的元数据,而另一些字节包含原始 ByteArray 数据的实际压缩版本。根据 zlib 压缩数据格式规范的定义,这些字节(即包含原始数据的压缩版本的部分)使用 deflate 算法进行压缩。因此,这些字节与对原始 ByteArray 调用 compress( CompressionAlgorithm.DEFLATE)
所得的结果相同。但是,compress( CompressionAlgorithm.ZLIB)
所得的结果包括额外的元数据,而 compress( air. CompressionAlgorithm.DEFLATE)
的结果只包括原始 ByteArray 数据的压缩版本,没有任何其它内容。
若要使用 deflate 格式以 gzip 或 zip 等特定格式压缩 ByteArray 实例的数据,不能只调用 compress( air. CompressionAlgorithm.DEFLATE)
。必须创建一个按照压缩格式规范构建的 ByteArray,包括相应的元数据以及使用 deflate 格式获取的压缩数据。同样,若要对以 gzip 或 zip 等格式压缩的数据进行解码,对这些数据不能只调用 uncompress( air. CompressionAlgorithm.DEFLATE)
。首先,必须将元数据与压缩数据分离,然后才能使用 deflate 格式对压缩数据进行解压缩。
参数
| algorithm:String (default = NaN ) —
压缩时所用的压缩算法。有效值定义为 CompressionAlgorithm 类中的常量。默认情况下使用 zlib 格式。仅为 Adobe AIR 中运行的内容识别此参数。Flash Player 只支持默认的 zlib 算法,如果尝试为此参数传递一个值,Flash Player 将引发异常。 调用 compress( air. CompressionAlgorithm.DEFLATE) 与调用 deflate() 方法效果相同。
|
另请参见
public function deflate():void
运行时版本: | Flash Player 10, AIR 1.5 |
使用 deflate 压缩算法压缩字节数组。压缩整个字节数组。
在调用后,ByteArray 的 length
属性将设置为新长度。 position
属性将设置为字节数组末尾。
http://www.ietf.org/rfc/rfc1951.txt 中介绍了 deflate 压缩算法。
若要使用 deflate 格式以 gzip 或 zip 等特定格式压缩 ByteArray 实例的数据,不能只调用 deflate()
。必须创建一个按照压缩格式规范构建的 ByteArray,包括相应的元数据以及使用 deflate 格式获取的压缩数据。同样,若要对以 gzip 或 zip 等格式压缩的数据进行解码,对这些数据不能只调用 inflate()
。首先,必须将元数据与压缩数据分离,然后才能使用 deflate 格式对压缩数据进行解压缩。
另请参见
public function inflate():void
运行时版本: | AIR 1.0 Flash Player 10 |
使用 deflate 压缩算法将字节数组解压缩。字节数组必须已经使用相同的算法进行压缩。
在调用后,ByteArray 的 length
属性将设置为新长度。position
属性将设置为 0。
http://www.ietf.org/rfc/rfc1951.txt 中介绍了 deflate 压缩算法。
为了对使用 deflate 压缩算法的格式压缩的数据(如 gzip 或 zip 格式的数据)进行解码,对包含压缩格式数据的 ByteArray 不能只调用 inflate()
。首先,必须将作为压缩数据格式的一部分而包括的元数据与实际压缩数据分开。有关详细信息,请参阅 compress()
方法的描述。
引发 | IOError — 数据不是有效的压缩数据;它不是使用用于压缩的相同压缩算法进行压缩的。 |
另请参见
public function readBoolean():Boolean
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取布尔值。读取单个字节,如果字节非零,则返回 true
,否则返回 false
。
返回 | Boolean —
如果字节不为零,则返回 true ,否则返回 false 。
|
引发 public function readByte():int
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取带符号的字节。
返回值的范围是从 -128 到 127。
返回 | int — 介于 -128 和 127 之间的整数。 |
引发 public function readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取 length
参数指定的数据字节数。从 offset
指定的位置开始,将字节读入 bytes
参数指定的 ByteArray 对象中,并将字节写入目标 ByteArray 中。
参数
| bytes:ByteArray — 要将数据读入的 ByteArray 对象。 |
|
| offset:uint (default = 0 ) —
bytes 中的偏移(位置),应从该位置写入读取的数据。
|
|
| length:uint (default = 0 ) — 要读取的字节数。默认值 0 导致读取所有可用的数据。 |
引发 public function readDouble():Number
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个 IEEE 754 双精度(64 位)浮点数。
返回引发 public function readFloat():Number
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个 IEEE 754 单精度(32 位)浮点数。
返回引发 public function readInt():int
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个带符号的 32 位整数。
返回值的范围是从 -2147483648 到 2147483647。
返回 | int — 介于 -2147483648 和 2147483647 之间的 32 位带符号整数。 |
引发 public function readMultiByte(length:uint, charSet:String):String
运行时版本: | AIR 1.0 Flash Player 9 |
使用指定的字符集从字节流中读取指定长度的多字节字符串。
参数
| length:uint — 要从字节流中读取的字节数。 |
|
| charSet:String —
表示用于解释字节的字符集的字符串。可能的字符集字符串包括 "shift-jis" 、"cn-gb" 、"iso-8859-1" ”等。有关完整列表,请参阅Supported Character Sets。
注意:如果当前系统无法识别 charSet 参数的值,则应用程序将使用系统的默认代码页作为字符集。例如,charSet 参数的值(如在使用 01 而不是 1 的 myTest.readMultiByte(22, "iso-8859-01") 中)可能在您的开发计算机上起作用,但在其它计算机上可能不起作用。在其他计算机上,应用程序将使用系统的默认代码页。
|
返回引发 public function readObject():*
运行时版本: | AIR 1.0 Flash Player 9 |
从字节数组中读取一个以 AMF 序列化格式进行编码的对象。
返回引发另请参见
public function readShort():int
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个带符号的 16 位整数。
返回值的范围是从 -32768 到 32767。
返回 | int — 介于 -32768 和 32767 之间的 16 位带符号整数。 |
引发 public function readUnsignedByte():uint
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取无符号的字节。
返回值的范围是从 0 到 255。
返回 | uint — 介于 0 和 255 之间的 32 位无符号整数。 |
引发 public function readUnsignedInt():uint
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个无符号的 32 位整数。
返回值的范围是从 0 到 4294967295。
返回 | uint — 介于 0 和 4294967295 之间的 32 位无符号整数。 |
引发 public function readUnsignedShort():uint
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个无符号的 16 位整数。
返回值的范围是从 0 到 65535。
返回 | uint — 介于 0 和 65535 之间的 16 位无符号整数。 |
引发 public function readUTF():String
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个 UTF-8 字符串。假定字符串的前缀是无符号的短整型(以字节表示长度)。
返回引发另请参见
public function readUTFBytes(length:uint):String
运行时版本: | AIR 1.0 Flash Player 9 |
从字节流中读取一个由 length
参数指定的 UTF-8 字节序列,并返回一个字符串。
参数
| length:uint — 指明 UTF-8 字节长度的无符号短整型数。 |
返回 | String — 由指定长度的 UTF-8 字节组成的字符串。 |
引发 public function toString():String
运行时版本: | AIR 1.0 Flash Player 9 |
将字节数组转换为字符串。如果数组中的数据以 Unicode 字节顺序标记开头,应用程序在将其转换为字符串时将保持该标记。如果 System.useCodePage
设置为 true
,应用程序在转换时会将数组中的数据视为处于当前系统代码页中。
返回 public function uncompress(algorithm:String):void
运行时版本: | AIR 1.0 Flash Player 9 |
解压缩字节数组。对于在 Adobe AIR 中运行的内容,可以通过传递一个值(在 CompressionAlgorithm 类中定义)作为 algorithm
参数来指定压缩算法。字节数组必须已经使用相同的算法进行压缩。Flash Player 只支持默认的 zlib 算法。
在调用后,ByteArray 的 length
属性将设置为新长度。position
属性将设置为 0。
http://www.ietf.org/rfc/rfc1950.txt 中介绍了 zlib 压缩的数据格式。
http://www.ietf.org/rfc/rfc1951.txt 中介绍了 deflate 压缩算法。
在对使用 deflate 压缩算法的格式压缩的数据(如采用 gzip 或 zip 格式的数据)进行解码时,对包含压缩格式数据的 ByteArray 调用 uncompress(CompressionAlgorithm.DEFLATE)
将不起作用。首先,必须将作为压缩数据格式的一部分而包括的元数据与实际压缩数据分开。有关详细信息,请参阅 compress()
方法的描述。
参数
| algorithm:String (default = NaN ) —
解压缩时要使用的压缩算法。它必须是用于压缩该数据的相同的压缩算法。有效值定义为 CompressionAlgorithm 类中的常量。默认情况下使用 zlib 格式。仅为 Adobe AIR 中运行的内容识别此参数。Flash Player 只支持默认的 zlib 算法,如果尝试为此参数传递一个值,Flash Player 将引发异常。
|
引发 | IOError — 数据不是有效的压缩数据;它不是使用用于压缩的相同压缩算法进行压缩的。 |
另请参见
public function writeBoolean(value:Boolean):void
运行时版本: | AIR 1.0 Flash Player 9 |
写入布尔值。根据 value
参数写入单个字节。如果为 true
,则写入 1,如果为 false
,则写入 0。
参数
| value:Boolean —
确定写入哪个字节的布尔值。如果该参数为 true ,则该方法写入 1;如果该参数为 false ,则该方法写入 0。
|
public function writeByte(value:int):void
运行时版本: | AIR 1.0 Flash Player 9 |
在字节流中写入一个字节。
使用参数的低 8 位。忽略高 24 位。
参数
| value:int — 一个 32 位整数。低 8 位将被写入字节流。 |
public function writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
运行时版本: | AIR 1.0 Flash Player 9 |
将指定字节数组 bytes
(起始偏移量为 offset
,从零开始的索引)中包含 length
个字节的字节序列写入字节流。
如果省略 length
参数,则使用默认长度 0;该方法将从 offset
开始写入整个缓冲区。如果还省略了 offset
参数,则写入整个缓冲区。
如果 offset
或 length
超出范围,它们将被锁定到 bytes
数组的开头和结尾。
参数
| bytes:ByteArray — ByteArray 对象。 |
|
| offset:uint (default = 0 ) — 从 0 开始的索引,表示在数组中开始写入的位置。 |
|
| length:uint (default = 0 ) — 一个无符号整数,表示在缓冲区中的写入范围。 |
public function writeDouble(value:Number):void
运行时版本: | AIR 1.0 Flash Player 9 |
在字节流中写入一个 IEEE 754 双精度(64 位)浮点数。
参数
public function writeFloat(value:Number):void
运行时版本: | AIR 1.0 Flash Player 9 |
在字节流中写入一个 IEEE 754 单精度(32 位)浮点数。
参数
public function writeInt(value:int):void
运行时版本: | AIR 1.0 Flash Player 9 |
在字节流中写入一个带符号的 32 位整数。
参数
public function writeMultiByte(value:String, charSet:String):void
运行时版本: | AIR 1.0 Flash Player 9 |
使用指定的字符集将多字节字符串写入字节流。
参数
public function writeObject(object:*):void
运行时版本: | AIR 1.0 Flash Player 9 |
将对象以 AMF 序列化格式写入字节数组。
参数
另请参见
public function writeShort(value:int):void
运行时版本: | AIR 1.0 Flash Player 9 |
在字节流中写入一个 16 位整数。使用参数的低 16 位。忽略高 16 位。
参数
| value:int — 32 位整数,该整数的低 16 位将被写入字节流。 |
public function writeUnsignedInt(value:uint):void
运行时版本: | AIR 1.0 Flash Player 9 |
在字节流中写入一个无符号的 32 位整数。
参数
| value:uint — 要写入字节流的无符号整数。 |
public function writeUTF(value:String):void
运行时版本: | AIR 1.0 Flash Player 9 |
将 UTF-8 字符串写入字节流。先写入以字节表示的 UTF-8 字符串长度(作为 16 位整数),然后写入表示字符串字符的字节。
参数
引发 public function writeUTFBytes(value:String):void
运行时版本: | AIR 1.0 Flash Player 9 |
将 UTF-8 字符串写入字节流。类似于 writeUTF()
方法,但 writeUTFBytes()
不使用 16 位长度的词为字符串添加前缀。
参数
以下示例使用
ByteArrayExample
类将布尔值和 pi 的双精度浮点表示形式写入字节数组。这是使用以下步骤完成的:
-
声明新的 ByteArray 对象实例
byteArr
。
-
写入布尔值
false
的字节等效值,然后检查长度并重新读取。
- 写入数学值 pi 的双精度浮点等效值。
- 重新读取写入字节数组的九个字节中的每一个字节。
注意:在字节上调用 trace()
时,它将输出存储于字节数组中的字节的十进制等效值。
注意如何在末尾添加一段代码以检查文件结尾错误,确保读取的字节流没有超出文件结尾。
package {
import flash.display.Sprite;
import flash.utils.ByteArray;
import flash.errors.EOFError;
public class ByteArrayExample extends Sprite {
public function ByteArrayExample() {
var byteArr:ByteArray = new ByteArray();
byteArr.writeBoolean(false);
trace(byteArr.length); // 1
trace(byteArr[0]); // 0
byteArr.writeDouble(Math.PI);
trace(byteArr.length); // 9
trace(byteArr[0]); // 0
trace(byteArr[1]); // 64
trace(byteArr[2]); // 9
trace(byteArr[3]); // 33
trace(byteArr[4]); // 251
trace(byteArr[5]); // 84
trace(byteArr[6]); // 68
trace(byteArr[7]); // 45
trace(byteArr[8]); // 24
byteArr.position = 0;
try {
trace(byteArr.readBoolean() == false); // true
}
catch(e:EOFError) {
trace(e); // EOFError: Error #2030: End of file was encountered.
}
try {
trace(byteArr.readDouble()); // 3.141592653589793
}
catch(e:EOFError) {
trace(e); // EOFError: Error #2030: End of file was encountered.
}
try {
trace(byteArr.readDouble());
}
catch(e:EOFError) {
trace(e); // EOFError: Error #2030: End of file was encountered.
}
}
}
}
© 2004-2008 Adobe Systems Incorporated. All rights reserved.
Sun Dec 14 2008, 10:39 PM -08:00