flash.utils
接口public interface IDataInput
实现器 ByteArray, FileStream, Socket, URLStream

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

IDataInput 接口提供一组用于读取二进制数据的方法。此接口是写入二进制数据的 IDataOutput 接口的 I/O 对应接口。

默认情况下,所有 IDataInput 和 IDataOutput 操作均为“bigEndian”(序列中的最高有效字节存储在最低或第一个存储地址),而且都不分块。如果可用数据不足,则会引发 EOFError 异常。使用 IDataInput.bytesAvailable 属性来确定可供读取的数据有多少。

符号扩展名仅在读取数据时有效,写入数据时无效。因此,无需单独的写入方法就可以使用 IDataInput.readUnsignedByte()IDataInput.readUnsignedShort()。换言之:

查看示例

另请参见

IDataOutput interface
endian
FileStream 类
Socket 类
URLStream 类
ByteArray 类
EOFError 类


公共属性
 属性定义方
  bytesAvailable : uint
[只读 (read-only)] 返回可在输入缓冲区中读取的数据的字节数。
IDataInput
  endian : String
数据的字节顺序:为 Endian 类中的 BIG_ENDIAN 或 LITTLE_ENDIAN 常量。
IDataInput
  objectEncoding : uint
用于确定在使用 readObject() 方法写入或读取二进制数据时是使用 AMF3 格式还是 AMF0 格式。
IDataInput
公共方法
 方法定义方
  
从文件流、字节流或字节数组中读取布尔值。
IDataInput
  
从文件流、字节流或字节数组中读取带符号的字节。
IDataInput
  
readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
从文件流、字节流或字节数组中读取 length 参数指定的数据字节数。
IDataInput
  
从文件流、字节流或字节数组中读取 IEEE 754 双精度浮点数。
IDataInput
  
从文件流、字节流或字节数组中读取 IEEE 754 单精度浮点数。
IDataInput
  
从文件流、字节流或字节数组中读取带符号的 32 位整数。
IDataInput
  
readMultiByte(length:uint, charSet:String):String
使用指定的字符集从文件流、字节流或字节数组中读取指定长度的多字节字符串。
IDataInput
  
从文件流、字节流或字节数组中读取以 AMF 序列化格式编码的对象。
IDataInput
  
从文件流、字节流或字节数组中读取带符号的 16 位整数。
IDataInput
  
从文件流、字节流或字节数组中读取无符号的字节。
IDataInput
  
从文件流、字节流或字节数组中读取无符号的 32 位整数。
IDataInput
  
从文件流、字节流或字节数组中读取无符号的 16 位整数。
IDataInput
  
从文件流、字节流或字节数组中读取 UTF-8 字符串。
IDataInput
  
从字节流或字节数组中读取包含 个字节的 UTF-8 字节序列,并返回一个字符串。
IDataInput
属性详细信息
bytesAvailable属性
bytesAvailable:uint  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

返回可在输入缓冲区中读取的数据的字节数。在尝试使用某一种读取方法读取数据之前,用户代码必须调用 bytesAvailable 以确保有足够的数据可用。



实现
    public function get bytesAvailable():uint
endian属性 
endian:String  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

数据的字节顺序:为 Endian 类中的 BIG_ENDIANLITTLE_ENDIAN 常量。



实现
    public function get endian():String
    public function set endian(value:String):void

另请参见

objectEncoding属性 
objectEncoding:uint  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

用于确定在使用 readObject() 方法写入或读取二进制数据时是使用 AMF3 格式还是 AMF0 格式。该值为 ObjectEncoding 类中的常数。



实现
    public function get objectEncoding():uint
    public function set objectEncoding(value:uint):void

另请参见

方法详细信息
readBoolean()方法
public function readBoolean():Boolean

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取布尔值。读取单个字节,如果字节非零,则返回 true,否则返回 false

返回
Boolean — 一个布尔值,如果字节不为零,则为 true,否则为 false

引发
EOFError — 没有足够的数据可供读取。
readByte()方法 
public function readByte():int

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取带符号的字节。

返回
int — 返回值的范围是从 -128 到 127。

引发
EOFError — 没有足够的数据可供读取。
readBytes()方法 
public function readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取 length 参数指定的数据字节数。将从 offset 指定的位置开始,将字节读入 bytes 参数指定的 ByteArray 对象。

参数

bytes:ByteArray — 要将数据读入的 ByteArray 对象。
 
offset:uint (default = 0)bytes 参数中的偏移,应从该位置开始读取数据。
 
length:uint (default = 0) — 要读取的字节数。默认值 0 导致读取所有可用的数据。


引发
EOFError — 没有足够的数据可供读取。
readDouble()方法 
public function readDouble():Number

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取 IEEE 754 双精度浮点数。

返回
Number — 一个 IEEE 754 双精度浮点数。

引发
EOFError — 没有足够的数据可供读取。
readFloat()方法 
public function readFloat():Number

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取 IEEE 754 单精度浮点数。

返回
Number — 一个 IEEE 754 单精度浮点数。

引发
EOFError — 没有足够的数据可供读取。
readInt()方法 
public function readInt():int

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取带符号的 32 位整数。

返回
int — 返回值的范围是从 -2147483648 到 2147483647。

引发
EOFError — 没有足够的数据可供读取。
readMultiByte()方法 
public function readMultiByte(length:uint, charSet:String):String

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

使用指定的字符集从文件流、字节流或字节数组中读取指定长度的多字节字符串。

参数

length:uint — 要从字节流中读取的字节数。
 
charSet:String — 表示用于解释字节的字符集的字符串。可能的字符集字符串包括 "shift-jis""cn-gb""iso-8859-1"”等。有关完整列表,请参阅Supported Character Sets

注意:如果当前系统无法识别 charSet 参数的值,则 Adobe®Flash®Player 或 Adobe®AIR 将采用系统的默认代码页作为字符集。例如,charSet 参数的值(如在使用 01 而不是 1myTest.readMultiByte(22, "iso-8859-01") 中)可能适用于您的开发计算机,而不适用于其它计算机。在其他计算机上,Flash Player 或 AIR 运行时将使用系统的默认代码页。

返回
String — UTF-8 编码的字符串。

引发
EOFError — 没有足够的数据可供读取。
readObject()方法 
public function readObject():*

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取以 AMF 序列化格式编码的对象。

返回
* — 反序列化的对象

引发
EOFError — 没有足够的数据可供读取。

另请参见

readShort()方法 
public function readShort():int

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取带符号的 16 位整数。

返回
int — 返回值的范围是从 -32768 到 32767。

引发
EOFError — 没有足够的数据可供读取。
readUnsignedByte()方法 
public function readUnsignedByte():uint

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取无符号的字节。

返回
uint — 返回值的范围是从 0 到 255。

引发
EOFError — 没有足够的数据可供读取。
readUnsignedInt()方法 
public function readUnsignedInt():uint

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取无符号的 32 位整数。

返回
uint — 返回值的范围是从 0 到 4294967295。

引发
EOFError — 没有足够的数据可供读取。
readUnsignedShort()方法 
public function readUnsignedShort():uint

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取无符号的 16 位整数。

返回
uint — 返回值的范围是从 0 到 65535。

引发
EOFError — 没有足够的数据可供读取。
readUTF()方法 
public function readUTF():String

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从文件流、字节流或字节数组中读取 UTF-8 字符串。假定字符串的前缀是无符号的短整型(以字节表示长度)。

此方法类似于 Java ® IDataInput 接口中的 readUTF() 方法。

返回
String — 由字符的字节表示形式生成的 UTF-8 字符串。

引发
EOFError — 没有足够的数据可供读取。
readUTFBytes()方法 
public function readUTFBytes(length:uint):String

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

从字节流或字节数组中读取包含 个字节的 UTF-8 字节序列,并返回一个字符串。

参数

length:uint — 要读取的字节数。

返回
String — 由指定长度字符的字节表示形式生成的 UTF-8 字符串。

引发
EOFError — 没有足够的数据可供读取。
示例 如何使用示例
DataInputExample.as

以下示例使用 DataInputExample 类将布尔值和 pi 的双精度浮点表示形式写入字节数组。这是使用以下步骤完成的:
  1. 声明新的 ByteArray 对象实例 byteArr
  2. 写入布尔值 false 的字节等效值和数学值 pi 的双精度浮点等效值。
  3. 重新读取布尔值和双精度浮点数。

注意如何在末尾添加一段代码以检查文件结尾错误,确保读取的字节流没有超出文件结尾。

package {
    import flash.display.Sprite;
    import flash.utils.ByteArray;
    import flash.errors.EOFError;

    public class DataInputExample extends Sprite {        
        public function DataInputExample() {
            var byteArr:ByteArray = new ByteArray();

            byteArr.writeBoolean(false);
            byteArr.writeDouble(Math.PI);
            
            byteArr.position = 0;

            try {
                trace(byteArr.readBoolean()); // false
            } 
            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.
            }
        }
    }
}