Documentation ¶
Overview ¶
Package segment 提供了基本数据类型的编解码功能 支持所有Go语言的基本类型,包括整数、浮点数、复数、字符串、字节数组和布尔值
Index ¶
- Variables
- func AppendSegmentToFile(file *os.File, segmentType string, data []byte, xref *FileXref) error
- func AppendSegmentsToFile(file *os.File, segments map[string][]byte, xref *FileXref) error
- func DecodeTo[T BasicType](codec *TypeCodec, data []byte) (T, error)
- func MustDecodeTo[T BasicType](codec *TypeCodec, data []byte) T
- func ReadFieldFromBytes(data []byte, fieldType string, xref *FileXref) ([]byte, error)
- func ReadFieldsFromBytes(data []byte, fieldTypes []string, xref *FileXref) (map[string]*SegmentReadResult, error)
- func ReadSegmentToBuffer(buffer *bytes.Buffer, segmentType string, xref *FileXref) ([]byte, error)
- func ReadSegmentsFromBuffer(buffer *bytes.Buffer, segmentTypes []string, xref *FileXref) (map[string]*SegmentReadResult, error)
- func SaveAndClose(file *os.File, xref *FileXref) error
- func WriteFileSegment(filePath string, data map[string][]byte) error
- func WriteSegmentToBuffer(buffer *bytes.Buffer, segmentType string, data []byte, xref *FileXref) error
- func WriteSegmentToFile(file *os.File, segmentType string, data []byte, xref *FileXref) error
- func WriteSegmentsToBuffer(buffer *bytes.Buffer, segments map[string][]byte, xref *FileXref) error
- func WriteSegmentsToFile(file *os.File, segments map[string][]byte, xref *FileXref) error
- type BasicType
- type FileXref
- func LoadXref(file *os.File) (*FileXref, error)
- func LoadXrefFromBuffer(reader io.Reader) (*FileXref, error)
- func LoadXrefFromFile(file *os.File) (*FileXref, error)
- func NewFileXref() *FileXref
- func ReadFileSegment(file *os.File, segmentType string) ([]byte, *FileXref, error)
- func ReadFileSegments(file *os.File, segmentTypes []string, fileXref ...*FileXref) (map[string]*SegmentReadResult, *FileXref, error)
- type SegmentReadResult
- type TypeCodec
- func (c *TypeCodec) Decode(data []byte) (interface{}, error)
- func (c *TypeCodec) DecodeBytes(data []byte) ([]byte, error)
- func (c *TypeCodec) Encode(v interface{}) ([]byte, error)
- func (c *TypeCodec) EncodeTo(dst []byte, v interface{}) ([]byte, error)
- func (c *TypeCodec) GetType(data []byte) (string, error)
- func (c *TypeCodec) MustDecode(data []byte) interface{}
- type TypeFlag
- type XrefEntry
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidData 表示输入数据太短,无法解码 ErrInvalidData = errors.New("invalid data: too short") // ErrUnsupportedType 表示不支持的数据类型 ErrUnsupportedType = errors.New("unsupported type") // ErrTypeMismatch 表示类型不匹配错误 ErrTypeMismatch = errors.New("type mismatch") // ErrInvalidLength 表示数据长度无效 ErrInvalidLength = errors.New("invalid data length") )
定义包级别的错误常量
Functions ¶
func AppendSegmentToFile ¶
AppendSegmentToFile 将一个段附加到文件 参数:
- file: *os.File 文件指针
- segmentType: string 段类型
- data: []byte 段数据
- xref: *FileXref 文件交叉引用结构
返回值:
- error 可能的错误
func AppendSegmentsToFile ¶
AppendSegmentsToFile 将多个段附加到文件 参数:
- file: *os.File 文件指针
- segments: map[string][]byte 段类型和段数据的映射
- xref: *FileXref 文件交叉引用结构
返回值:
- error 可能的错误
func DecodeTo ¶
DecodeTo 将字节数组解码为指定的基本类型 参数:
- codec: 类型编解码器
- data: 要解码的字节数组
返回值:
- T: 解码后的指定类型值
- error: 解码错误
func MustDecodeTo ¶
MustDecodeTo 是 DecodeTo 的快捷方式,解码失败时会 panic 参数:
- codec: 类型编解码器
- data: 要解码的字节数组
返回值:
- T: 解码后的指定类型值,如果解码失败则 panic
func ReadFieldFromBytes ¶
ReadFieldFromBytes 从字节切片中读取指定的单个字段 参数:
- data: []byte 输入字节切片
- fieldType: string 要读取的字段类型
- xref: *FileXref 文件交叉引用表
返回值:
- []byte 读取的字段数据
- error 可能的错误
func ReadFieldsFromBytes ¶
func ReadFieldsFromBytes(data []byte, fieldTypes []string, xref *FileXref) (map[string]*SegmentReadResult, error)
ReadFieldsFromBytes 从字节切片中批量读取多个字段 参数:
- data: []byte 输入字节切片
- fieldTypes: []string 要读取的字段类型列表
- xref: *FileXref 文件交叉引用表
返回值:
- map[string]*SegmentReadResult 读取结果映射
- error 可能的错误
func ReadSegmentToBuffer ¶
ReadSegmentToBuffer 从缓冲区中读取指定的单个段 参数:
- buffer: *bytes.Buffer 输入缓冲区
- segmentType: string 要读取的段类型
- xref: *FileXref 文件交叉引用表
返回值:
- []byte 读取的段数据
- error 可能的错误
func ReadSegmentsFromBuffer ¶
func ReadSegmentsFromBuffer(buffer *bytes.Buffer, segmentTypes []string, xref *FileXref) (map[string]*SegmentReadResult, error)
ReadSegmentsFromBuffer 从缓冲区中批量读取多个段 参数:
- buffer: *bytes.Buffer 输入缓冲区
- segmentTypes: []string 要读取的段类型列表
- xref: *FileXref 文件交叉引用表
返回值:
- map[string]*SegmentReadResult 读取结果映射
- error 可能的错误
func SaveAndClose ¶
SaveAndClose 保存 xref 表并关闭文件 参数:
- file: *os.File 要操作的文件对象
- xref: *FileXref 文件的交叉引用表
返回值:error 可能出现的错误
func WriteFileSegment ¶
WriteFileSegment 创建新文件并将数据写入 参数:
- filePath: string 要创建和写入的文件路径
- data: map[string][]byte 要写入的段数据,键为段类型,值为段内容
返回值:
- error 可能出现的错误
func WriteSegmentToBuffer ¶
func WriteSegmentToBuffer(buffer *bytes.Buffer, segmentType string, data []byte, xref *FileXref) error
WriteSegmentToBuffer 将段写入缓冲区 参数:
- buffer: *bytes.Buffer 要写入的缓冲区
- segmentType: string 段类型
- data: []byte 段的数据
- xref: *FileXref 文件的交叉引用表
返回值:
- error 可能出现的错误
func WriteSegmentToFile ¶
WriteSegmentToFile 将段写入文件 参数:
- file: *os.File 要写入的文件对象
- segmentType: string 段类型
- data: []byte 段的数据
- xref: *FileXref 文件的交叉引用表
返回值:
- error 可能出现的错误
func WriteSegmentsToBuffer ¶
WriteSegmentsToBuffer 批量将段写入缓冲区 参数:
- buffer: *bytes.Buffer 要写入的缓冲区
- segments: map[string][]byte 要写入的段数据,键为段类型,值为段内容
- xref: *FileXref 文件的交叉引用表
返回值:
- error 可能出现的错误
Types ¶
type BasicType ¶
type BasicType interface { ~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~float32 | ~float64 | ~complex64 | ~complex128 | ~string | ~bool | ~[]byte }
BasicType 定义了所有支持编解码的基本类型 包括所有数值类型、字符串、布尔值和字节切片
type FileXref ¶
type FileXref struct { XrefTable map[string]XrefEntry // xref 表 StartXref int64 // startxref 的位置 // contains filtered or unexported fields }
FileXref 结构体用于跟踪单个文件的 xref 表和 startxref 的位置
func LoadXref ¶
LoadXref 从文件加载 xref 表 参数:
- file: *os.File 要读取的文件对象
返回值:
- *FileXref 解析后的 xref 表
- error 可能出现的错误
func LoadXrefFromBuffer ¶
LoadXrefFromBuffer 从缓冲区加载 xref 表 参数:
- reader: io.Reader 要读取的缓冲区
返回值:
- *FileXref 解析后的 xref 表
- error 可能出现的错误
func LoadXrefFromFile ¶
LoadXrefFromFile 从文件加载 xref 表 参数:
- file: *os.File 要读取的文件对象
返回值:
- *FileXref 解析后的 xref 表
- error 可能出现的错误
func NewFileXref ¶
func NewFileXref() *FileXref
NewFileXref 创建一个新的 FileXref 对象,并初始化 xref 表 返回值:*FileXref 一个新的 FileXref 对象
func ReadFileSegment ¶
ReadFileSegment 从指定文件中读取一个指定的段 参数:
- file: *os.File 待读取的文件对象
- segmentType: string 要读取的段类型
返回值:
- []byte 读取的段内容
- *FileXref 解析得到的 Xref 表
- error 可能出现的错误
func ReadFileSegments ¶
func ReadFileSegments(file *os.File, segmentTypes []string, fileXref ...*FileXref) (map[string]*SegmentReadResult, *FileXref, error)
ReadFileSegments 从指定文件中读取一个或多个段 参数:
- file: *os.File 待读取的文件对象
- segmentTypes: []string 要读取的段类型列表
- fileXref: ...*FileXref 可选参数,已解析的 Xref 表
返回值:
- map[string]*SegmentReadResult 读取结果映射
- *FileXref 解析得到的 Xref 表
- error 可能出现的错误
type SegmentReadResult ¶
SegmentReadResult 用于表示单个段的读取结果
type TypeCodec ¶
type TypeCodec struct {
// contains filtered or unexported fields
}
TypeCodec 提供类型编解码功能 内部使用对象池来复用字节切片,提高性能
func NewTypeCodec ¶
func NewTypeCodec() *TypeCodec
NewTypeCodec 创建一个新的类型编解码器 返回值:
- *TypeCodec: 类型编解码器实例
func (*TypeCodec) Decode ¶
Decode 将字节数组解码为原始类型 参数:
- data: 要解码的字节数组
返回值:
- interface{}: 解码后的值
- error: 解码过程中的错误,如果成功则为 nil
func (*TypeCodec) DecodeBytes ¶
DecodeBytes 专门用于解码字节切片类型 参数:
- data: 编码的数据
返回值:
- []byte: 解码后的字节切片
- error: 解码错误
func (*TypeCodec) Encode ¶
Encode 将任意支持的类型编码为字节数组 编码格式:第一个字节为类型标记,后续字节为值的二进制表示
参数:
- v: 要编码的值,必须是基本数据类型
返回值:
- []byte: 编码后的字节数组
- error: 编码过程中的错误,如果值类型不支持则返回错误
示例:
codec := NewTypeCodec() data, err := codec.Encode(123)
func (*TypeCodec) EncodeTo ¶
EncodeTo 将值编码到已存在的字节切片中 参数:
- dst: 目标字节切片
- v: 要编码的值
返回值:
- []byte: 编码后的字节切片
- error: 编码错误
func (*TypeCodec) GetType ¶
GetType 获取字节数组中存储的值的类型 参数:
- data: 要检查类型的字节数组
返回值:
- string: 类型名称
- error: 获取类型过程中的错误,如果成功则为 nil
func (*TypeCodec) MustDecode ¶
MustDecode 是 Decode 的快捷方式,解码失败时会 panic 参数:
- data: 要解码的字节数组
返���值:
- interface{}: 解码后的值,如果解码失败则 panic
type TypeFlag ¶
type TypeFlag byte
TypeFlag 用于标识数据类型的标记
const ( // 有符号整数类型 TypeInt TypeFlag = iota + 1 // int 类型,占用1字节 TypeInt8 // int8 类型,占用1字节 TypeInt16 // int16 类型,占用2字节 TypeInt32 // int32 类型,占用4字节 TypeInt64 // int64 类型,占用8字节 // 无符号整数类型 TypeUint // uint 类型,占用8字节 TypeUint8 // uint8 类型,占用1字节 TypeUint16 // uint16 类型,占用2字节 TypeUint32 // uint32 类型,占用4字节 TypeUint64 // uint64 类型,占用8字节 // 浮点数类型 TypeFloat32 // float32 类型,占用4字节 TypeFloat64 // float64 类型,占用8字节 // 字符串和字节类型 TypeString // string 类型,变长 TypeBytes // []byte 类型,变长 // 布尔类型 TypeBool // bool 类型,占用1字节 // 复数类型 TypeComplex64 // complex64 类型,占用8字节 TypeComplex128 // complex128 类型,占用16字节 )
支持的数据类型标记常量