- 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 构造函数
- func NewReader(buf []byte, simple bool) (reader *Reader)
buf 为反序列化数据的数据。
simple 如果为 true,则不使用引用方式反序列化,通常在反序列化的数据中不包含引用类型数据时,设置为 true 可以加快速度。当包含引用类型数据时,需要设置为 false(即默认值),否则会抛出异常。
Simple 字段
同上面的 simple 参数。
JSONCompatible 字段
反序列化数据时,如果反序列化的数据为 interface{} 的指针,而不是某个具体类型数据的指针,那么将会按照默认类型序列化。下面是 hprose 类型与反序列化默认类型的对应关系表:
| hprose 类型 | go 类型 |
|---|---|
| Integer | int |
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 方法
- func (r *Reader) CheckTag(expectTag byte) (tag byte)
检查当前位置的字节是否为 expectTag,如果是返回该 tag 字节,否则 panic。
CheckTags 方法
- func (r *Reader) CheckTags(expectTags []byte) (tag byte)
检查当前位置的字节是否为 expectTags 之一,如果是返回该 tag 字节,否则 panic。
ReadBigIntWithoutTag 方法
- func (r *Reader) ReadBigIntWithoutTag() *big.Int
从 r 的当前位置读取数据并反序列化为一个 *big.Int 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagLong。
如果反序列化过程中发生错误,则 panic。
ReadBool 方法
- func (r *Reader) ReadBool() bool
从 r 的当前位置读取数据并反序列化为一个 bool 值。
如果反序列化过程中发生错误,则 panic。
ReadBytesWithoutTag 方法
- func (r *Reader) ReadBytesWithoutTag() (b []byte)
从 r 的当前位置读取数据并反序列化为 []byte 结果并返回。该方法假设序列化标记已被读取,并且其值为 TagBytes。
如果反序列化过程中发生错误,则 panic。
ReadComplex128 方法
- func (r *Reader) ReadComplex128() complex128
从 r 的当前位置读取数据并反序列化为一个 complex128 值。
如果反序列化过程中发生错误,则 panic。
ReadComplex64 方法
- func (r *Reader) ReadComplex64() complex64
从 r 的当前位置读取数据并反序列化为一个 complex64 值。
如果反序列化过程中发生错误,则 panic。
ReadCount 方法
- func (r *Reader) ReadCount() int
从 r 的当前位置读取数组,slice,map 或者结构体字段的数量。该方法假设序列化标记已被读取。该方法主要用于 RPC 实现,用户通常不需要直接使用该方法。
如果反序列化过程中发生错误,则 panic。
ReadDateTimeWithoutTag 方法
- func (r *Reader) ReadDateTimeWithoutTag() (dt time.Time)
从 r 的当前位置读取数据并反序列化为一个 time.Time 值。该方法假设序列化标记已被读取,并且其值为 TagDate。
如果反序列化过程中发生错误,则 panic。
ReadFloat32 方法
- func (r *Reader) ReadFloat32() float32
从 r 的当前位置读取数据并反序列化为一个 float32 值。
如果反序列化过程中发生错误,则 panic。
ReadFloat64 方法
- func (r *Reader) ReadFloat64() float64
从 r 的当前位置读取数据并反序列化为一个 float64 值。
如果反序列化过程中发生错误,则 panic。
ReadInt 方法
- func (r *Reader) ReadInt() int64
从 r 的当前位置读取数据并反序列化为一个 int64 值。
如果反序列化过程中发生错误,则 panic。
ReadIntWithoutTag 方法
- func (r *Reader) ReadIntWithoutTag() int
从 r 的当前位置读取数据并反序列化为一个 int 值。该方法假设序列化标记已被读取,并且其值为 TagInteger。
如果反序列化过程中发生错误,则 panic。
ReadSlice 方法
- func (r *Reader) ReadSlice(v []reflect.Value)
从 r 的当前位置读取数据并反序列化到 v 中。该方法假设序列化标记已被读取,并且其值为 TagList,且元素个数也已被读取,并且等于 v 的长度,反序列化时,每个元素按照 v 中每个元素的类型进行反序列化。该方法用于 RPC 实现,用户通常不需要使用该方法。
如果反序列化过程中发生错误,则 panic。
ReadSliceWithoutTag 方法
- func (r *Reader) ReadSliceWithoutTag() []reflect.Value
从 r 的当前位置读取数据并反序列化为一个 []reflect.Value 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagList。
如果反序列化过程中发生错误,则 panic。
ReadString 方法
- func (r *Reader) ReadString() (str string)
从 r 的当前位置读取数据并反序列化为一个 string 类型的数据。
如果反序列化过程中发生错误,则 panic。
ReadStringWithoutTag 方法
- func (r *Reader) ReadStringWithoutTag() (str string)
从 r 的当前位置读取数据并反序列化为一个 string 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagString。
如果反序列化过程中发生错误,则 panic。
ReadTime 方法
- func (r *Reader) ReadTime() (dt time.Time)
从 r 的当前位置读取数据并反序列化为一个 time.Time 类型的数据。
如果反序列化过程中发生错误,则 panic。
ReadTimeWithoutTag 方法
- func (r *Reader) ReadTimeWithoutTag() (t time.Time)
从 r 的当前位置读取数据并反序列化为一个 time.Time 类型的数据。该方法假设序列化标记已被读取,并且其值为 TagTime。
如果反序列化过程中发生错误,则 panic。
ReadUint 方法
- func (r *Reader) ReadUint() uint64
从 r 的当前位置读取数据并反序列化为一个 uint64 类型的数据。
如果反序列化过程中发生错误,则 panic。
ReadValue 方法
- func (r *Reader) ReadValue(v reflect.Value)
从 r 的当前位置读取数据并反序列化到参数 v 中。反序列化的数据类型跟 v 中所包含的类型一致。
如果反序列化过程中发生错误,则 panic。
Reset 方法
- func (r *Reader) Reset()
将反序列化的引用计数器重置。
Unserialize 方法
- func (r *Reader) Unserialize(p interface{})
从 r 的当前位置读取数据并反序列化结果到 p 中,p 是一个指向结果的指针。
如果反序列化过程中发生错误,则 panic。
