结构体 - 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。