• Reader
    • NewReader 构造函数
    • Simple 字段
    • JSONCompatible 字段
    • CheckTag 方法
    • CheckTags 方法
    • ReadBigIntWithoutTag 方法
    • ReadBool 方法
    • ReadBytesWithoutTag 方法
    • ReadComplex128 方法
    • ReadComplex64 方法
    • ReadCount 方法
    • ReadDateTimeWithoutTag 方法
    • ReadFloat32 方法
    • ReadFloat64 方法
    • ReadInt 方法
    • ReadIntWithoutTag 方法
    • ReadSlice 方法
    • ReadSliceWithoutTag 方法
    • ReadString 方法
    • ReadStringWithoutTag 方法
    • ReadTime 方法
    • ReadTimeWithoutTag 方法
    • ReadUint 方法
    • ReadValue 方法
    • Reset 方法
    • Unserialize 方法

    Reader

    NewReader 构造函数

    1. func NewReader(buf []byte, simple bool) (reader *Reader)

    buf 为反序列化数据的数据。

    simple 如果为 true,则不使用引用方式反序列化,通常在反序列化的数据中不包含引用类型数据时,设置为 true 可以加快速度。当包含引用类型数据时,需要设置为 false(即默认值),否则会抛出异常。

    Simple 字段

    同上面的 simple 参数。

    JSONCompatible 字段

    反序列化数据时,如果反序列化的数据为 interface{} 的指针,而不是某个具体类型数据的指针,那么将会按照默认类型序列化。下面是 hprose 类型与反序列化默认类型的对应关系表:

    hprose 类型 go 类型
    Integer int
    1. Long | *big.Int

    Double | float64Boolean | boolUTF8 char | stringNull | nilEmpty | ""DateTime | time.TimeBytes | []byteString | stringGUID | stringList | []interface{}Map | map[interface{}]interface{}Object | 结构体对象指针

    我们会发现 Map 类型的默认映射类型是:map[interface{}]interface{},如果将 JSONCompatible 字段设置为 true,则 Map 类型的默认映射类型是:map[string]interface{},当你确认你的 Map 数据是 JSON 兼容的,即 map 的 key 一定是 string 类型或者可以转换为 string 类型的数据时,可以将该字段设置为 true

    CheckTag 方法

    1. func (r *Reader) CheckTag(expectTag byte) (tag byte)

    检查当前位置的字节是否为 expectTag,如果是返回该 tag 字节,否则 panic。

    CheckTags 方法

    1. func (r *Reader) CheckTags(expectTags []byte) (tag byte)

    检查当前位置的字节是否为 expectTags 之一,如果是返回该 tag 字节,否则 panic。

    ReadBigIntWithoutTag 方法

    1. func (r *Reader) ReadBigIntWithoutTag() *big.Int

    r 的当前位置读取数据并反序列化为一个 *big.Int 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagLong

    如果反序列化过程中发生错误,则 panic。

    ReadBool 方法

    1. func (r *Reader) ReadBool() bool

    r 的当前位置读取数据并反序列化为一个 bool 值。

    如果反序列化过程中发生错误,则 panic。

    ReadBytesWithoutTag 方法

    1. func (r *Reader) ReadBytesWithoutTag() (b []byte)

    r 的当前位置读取数据并反序列化为 []byte 结果并返回。该方法假设序列化标记已被读取,并且其值为 TagBytes。

    如果反序列化过程中发生错误,则 panic。

    ReadComplex128 方法

    1. func (r *Reader) ReadComplex128() complex128

    r 的当前位置读取数据并反序列化为一个 complex128 值。

    如果反序列化过程中发生错误,则 panic。

    ReadComplex64 方法

    1. func (r *Reader) ReadComplex64() complex64

    r 的当前位置读取数据并反序列化为一个 complex64 值。

    如果反序列化过程中发生错误,则 panic。

    ReadCount 方法

    1. func (r *Reader) ReadCount() int

    r 的当前位置读取数组,slice,map 或者结构体字段的数量。该方法假设序列化标记已被读取。该方法主要用于 RPC 实现,用户通常不需要直接使用该方法。

    如果反序列化过程中发生错误,则 panic。

    ReadDateTimeWithoutTag 方法

    1. func (r *Reader) ReadDateTimeWithoutTag() (dt time.Time)

    r 的当前位置读取数据并反序列化为一个 time.Time 值。该方法假设序列化标记已被读取,并且其值为 TagDate

    如果反序列化过程中发生错误,则 panic。

    ReadFloat32 方法

    1. func (r *Reader) ReadFloat32() float32

    r 的当前位置读取数据并反序列化为一个 float32 值。

    如果反序列化过程中发生错误,则 panic。

    ReadFloat64 方法

    1. func (r *Reader) ReadFloat64() float64

    r 的当前位置读取数据并反序列化为一个 float64 值。

    如果反序列化过程中发生错误,则 panic。

    ReadInt 方法

    1. func (r *Reader) ReadInt() int64

    r 的当前位置读取数据并反序列化为一个 int64 值。

    如果反序列化过程中发生错误,则 panic。

    ReadIntWithoutTag 方法

    1. func (r *Reader) ReadIntWithoutTag() int

    r 的当前位置读取数据并反序列化为一个 int 值。该方法假设序列化标记已被读取,并且其值为 TagInteger

    如果反序列化过程中发生错误,则 panic。

    ReadSlice 方法

    1. func (r *Reader) ReadSlice(v []reflect.Value)

    r 的当前位置读取数据并反序列化到 v 中。该方法假设序列化标记已被读取,并且其值为 TagList,且元素个数也已被读取,并且等于 v 的长度,反序列化时,每个元素按照 v 中每个元素的类型进行反序列化。该方法用于 RPC 实现,用户通常不需要使用该方法。

    如果反序列化过程中发生错误,则 panic。

    ReadSliceWithoutTag 方法

    1. func (r *Reader) ReadSliceWithoutTag() []reflect.Value

    r 的当前位置读取数据并反序列化为一个 []reflect.Value 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagList

    如果反序列化过程中发生错误,则 panic。

    ReadString 方法

    1. func (r *Reader) ReadString() (str string)

    r 的当前位置读取数据并反序列化为一个 string 类型的数据。

    如果反序列化过程中发生错误,则 panic。

    ReadStringWithoutTag 方法

    1. func (r *Reader) ReadStringWithoutTag() (str string)

    r 的当前位置读取数据并反序列化为一个 string 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagString

    如果反序列化过程中发生错误,则 panic。

    ReadTime 方法

    1. func (r *Reader) ReadTime() (dt time.Time)

    r 的当前位置读取数据并反序列化为一个 time.Time 类型的数据。

    如果反序列化过程中发生错误,则 panic。

    ReadTimeWithoutTag 方法

    1. func (r *Reader) ReadTimeWithoutTag() (t time.Time)

    r 的当前位置读取数据并反序列化为一个 time.Time 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagTime

    如果反序列化过程中发生错误,则 panic。

    ReadUint 方法

    1. func (r *Reader) ReadUint() uint64

    r 的当前位置读取数据并反序列化为一个 uint64 类型的数据。

    如果反序列化过程中发生错误,则 panic。

    ReadValue 方法

    1. func (r *Reader) ReadValue(v reflect.Value)

    r 的当前位置读取数据并反序列化到参数 v 中。反序列化的数据类型跟 v 中所包含的类型一致。

    如果反序列化过程中发生错误,则 panic。

    Reset 方法

    1. func (r *Reader) Reset()

    将反序列化的引用计数器重置。

    Unserialize 方法

    1. func (r *Reader) Unserialize(p interface{})

    r 的当前位置读取数据并反序列化结果到 p 中,p 是一个指向结果的指针。

    如果反序列化过程中发生错误,则 panic。