hprose.Reader
构造器方法
- var reader = new Reader(stream[, simple[, useHarmonyMap[, binary]]]);
第一个参数 stream
是一个 StringIO
的实例对象,反序列化数据将会从该对象中读取。
第二个参数 simple
如果为 true
,则不使用引用方式反序列化,通常在反序列化的数据中不包含引用类型数据时,设置为 true
可以加快速度。当包含引用类型数据时,需要设置为 false
(即默认值),否则会抛出异常。
第三个参数 useHarmonyMap
如果为 true
,则反序列化 Map 时,会以 ECMAScript 6 中的 Map 类型的实例对象返回反序列化值。否则返回 Object 对象。当反序列化的 Map 的键(key)为非字符串以外的其它类型(或多种混合类型)时,将该参数设置为 true
可以得到更准确的反序列化结果。默认值为 false
。
第四个参数 binary
为 true
时,StringIO
的实例对象中的数据为二进制字符串,为 false
时,StringIO
的实例对象中的数据为普通字符串。只有当序列化数据中包含二进制字符串数据时,才需要将该参数设置为 true
。
stream 属性
只读属性,返回当前用于读取反序列化数据的 StringIO
实例对象。该属性的值即上面构造器中的第一个参数。
useHarmonyMap 属性
功能同上面的第三个参数一样,可以在对象创建之后进行设置。
binary 属性
功能同上面的第四个参数一样,可以在对象创建之后进行设置。
checkTag 方法
- reader.checkTag(expectTag[, tag]);
如果第二个参数不存在,则自动读取当前流中的一个字符作为 tag
值。如果 expectTag
和 tag
不一致,则抛出异常。
该方法没有返回值。
checkTags 方法
- reader.checkTags(expectTags[, tag]);
如果第二个参数不存在,则自动读取当前流中的一个字符作为 tag
值。如果 expectTags
中不包含 tag
,则抛出异常。
expectTags
是一个字符数组或者字符串,该数组或字符串中包含一个或多个 hprose.Tags 中的枚举值,但通常不会用其它取值。
如果该方法执行成功,返回 tag
值。
unserialize 方法
- reader.unserialize();
从当前数据流中读取数据并返回反序列化结果。如果当前数据流中包含有多个序列化数据,则一次只返回一个结果。
如果反序列化过程中发生错误,则会抛出异常。
readInteger 方法
- reader.readInteger();
从当前数据流中反序列化一个整数结果并返回。
如果反序列化过程中发生错误,则会抛出异常。
readLong 方法
- reader.readLong();
从当前数据流中反序列化一个长整数结果并返回,如果该结果超出 JavaScript 可表示的整数范围,则以字符串形式返回结果。
如果反序列化过程中发生错误,则会抛出异常。
readDouble 方法
- reader.readDouble();
从当前数据流中反序列化一个浮点数结果并返回。
如果反序列化过程中发生错误,则会抛出异常。
readBoolean 方法
- reader.readBoolean();
从当前数据流中反序列化一个布尔值结果并返回。
如果反序列化过程中发生错误,则会抛出异常。
readDate 方法
- reader.readDate();
从当前数据流中反序列化一个 Date 结果并返回。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readDateWithoutTag();
从当前数据流中反序列化一个 Date 结果并返回,该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagDate。
如果反序列化过程中发生错误,则会抛出异常。
readTime 方法
- reader.readTime();
从当前数据流中反序列化一个只包含时间的 Date 结果并返回。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readTimeWithoutTag();
从当前数据流中反序列化一个只包含时间的 Date 结果并返回,该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagTime。
如果反序列化过程中发生错误,则会抛出异常。
readBinary 方法
- reader.readBinary();
从当前数据流中反序列化一个二进制数据结果并返回。返回结果为 BinaryString
类型的实例对象。只有当 binary
属性为 true
时,该方法才能调用,否则抛出异常。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readBinaryWithoutTag();
从当前数据流中反序列化一个二进制数据结果并返回。该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagBytes。
如果反序列化过程中发生错误,则会抛出异常。
readString 方法
- reader.readString();
从当前数据流中反序列化一个字符串结果并返回。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readStringWithoutTag();
从当前数据流中反序列化一个字符串结果并返回。该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagString。
如果反序列化过程中发生错误,则会抛出异常。
readGuid 方法
- reader.readGuid();
从当前数据流中反序列化一个 GUID 结果并返回,结果为字符串类型。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readGuidWithoutTag();
从当前数据流中反序列化一个 GUID 结果并返回。该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagGuid。
如果反序列化过程中发生错误,则会抛出异常。
readList 方法
- reader.readList();
从当前数据流中反序列化一个 List 结果并返回,结果为数组类型。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readListWithoutTag();
从当前数据流中反序列化一个 List 结果并返回。该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagList。
如果反序列化过程中发生错误,则会抛出异常。
readMap 方法
- reader.readMap();
从当前数据流中反序列化一个 Map 结果并返回,结果为 Object 类型的实例对象或 ECMAScript 6 的 Map 类型的实例对象。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readMapWithoutTag();
从当前数据流中反序列化一个 Map 结果并返回。该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagMap。
如果反序列化过程中发生错误,则会抛出异常。
readObject 方法
- reader.readObject();
从当前数据流中反序列化一个对象结果并返回。该对象的构造器会通过以下方式查找或生成:
如果已经通过 hprose.ClassManager.register
方法注册,并可以查找到,直接返回。
如果在全局通过遍历搜索可以查找到同名构造器,则自动注册,并返回。
通过将读取到的类名中的 _
分别替换成 .
来全局遍历查找同名构造器,如果找到,则自动注册,并返回。
如果通过以上方式都查找不到,则自动生成一个构造器,然后自动注册,并返回。
自动生成的构造器上会添加一个 getClassName 方法,该方法会返回反序列化时读取到的类名。
如果反序列化过程中发生错误,则会抛出异常。
- reader.readObjectWithoutTag();
从当前数据流中反序列化一个对象结果并返回。该方法假设序列化标记已被读取,并且其值为 hprose.Tags.TagObject。
如果反序列化过程中发生错误,则会抛出异常。
reset 方法
- reader.reset();
将反序列化的引用计数器重置。