segment

package
v2.0.15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 11, 2025 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package segment 提供了基本数据类型的编解码功能 支持所有Go语言的基本类型,包括整数、浮点数、复数、字符串、字节数组和布尔值

Index

Constants

This section is empty.

Variables

View Source
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

func AppendSegmentToFile(file *os.File, segmentType string, data []byte, xref *FileXref) error

AppendSegmentToFile 将一个段附加到文件 参数:

  • file: *os.File 文件指针
  • segmentType: string 段类型
  • data: []byte 段数据
  • xref: *FileXref 文件交叉引用结构

返回值:

  • error 可能的错误

func AppendSegmentsToFile

func AppendSegmentsToFile(file *os.File, segments map[string][]byte, xref *FileXref) error

AppendSegmentsToFile 将多个段附加到文件 参数:

  • file: *os.File 文件指针
  • segments: map[string][]byte 段类型和段数据的映射
  • xref: *FileXref 文件交叉引用结构

返回值:

  • error 可能的错误

func DecodeTo

func DecodeTo[T BasicType](codec *TypeCodec, data []byte) (T, error)

DecodeTo 将字节数组解码为指定的基本类型 参数:

  • codec: 类型编解码器
  • data: 要解码的字节数组

返回值:

  • T: 解码后的指定类型值
  • error: 解码错误

func MustDecodeTo

func MustDecodeTo[T BasicType](codec *TypeCodec, data []byte) T

MustDecodeTo 是 DecodeTo 的快捷方式,解码失败时会 panic 参数:

  • codec: 类型编解码器
  • data: 要解码的字节数组

返回值:

  • T: 解码后的指定类型值,如果解码失败则 panic

func ReadFieldFromBytes

func ReadFieldFromBytes(data []byte, fieldType string, xref *FileXref) ([]byte, error)

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

func ReadSegmentToBuffer(buffer *bytes.Buffer, segmentType string, xref *FileXref) ([]byte, error)

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

func SaveAndClose(file *os.File, xref *FileXref) error

SaveAndClose 保存 xref 表并关闭文件 参数:

  • file: *os.File 要操作的文件对象
  • xref: *FileXref 文件的交叉引用表

返回值:error 可能出现的错误

func WriteFileSegment

func WriteFileSegment(filePath string, data map[string][]byte) error

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

func WriteSegmentToFile(file *os.File, segmentType string, data []byte, xref *FileXref) error

WriteSegmentToFile 将段写入文件 参数:

  • file: *os.File 要写入的文件对象
  • segmentType: string 段类型
  • data: []byte 段的数据
  • xref: *FileXref 文件的交叉引用表

返回值:

  • error 可能出现的错误

func WriteSegmentsToBuffer

func WriteSegmentsToBuffer(buffer *bytes.Buffer, segments map[string][]byte, xref *FileXref) error

WriteSegmentsToBuffer 批量将段写入缓冲区 参数:

  • buffer: *bytes.Buffer 要写入的缓冲区
  • segments: map[string][]byte 要写入的段数据,键为段类型,值为段内容
  • xref: *FileXref 文件的交叉引用表

返回值:

  • error 可能出现的错误

func WriteSegmentsToFile

func WriteSegmentsToFile(file *os.File, segments map[string][]byte, xref *FileXref) error

WriteSegmentsToFile 批量将段写入文件 参数:

  • file: *os.File 要写入的文件对象
  • 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

func LoadXref(file *os.File) (*FileXref, error)

LoadXref 从文件加载 xref 表 参数:

  • file: *os.File 要读取的文件对象

返回值:

  • *FileXref 解析后的 xref 表
  • error 可能出现的错误

func LoadXrefFromBuffer

func LoadXrefFromBuffer(reader io.Reader) (*FileXref, error)

LoadXrefFromBuffer 从缓冲区加载 xref 表 参数:

  • reader: io.Reader 要读取的缓冲区

返回值:

  • *FileXref 解析后的 xref 表
  • error 可能出现的错误

func LoadXrefFromFile

func LoadXrefFromFile(file *os.File) (*FileXref, error)

LoadXrefFromFile 从文件加载 xref 表 参数:

  • file: *os.File 要读取的文件对象

返回值:

  • *FileXref 解析后的 xref 表
  • error 可能出现的错误

func NewFileXref

func NewFileXref() *FileXref

NewFileXref 创建一个新的 FileXref 对象,并初始化 xref 表 返回值:*FileXref 一个新的 FileXref 对象

func ReadFileSegment

func ReadFileSegment(file *os.File, segmentType string) ([]byte, *FileXref, error)

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

type SegmentReadResult struct {
	Data  []byte // 读取的数据
	Error error  // 读取过程中发生的错误
}

SegmentReadResult 用于表示单个段的读取结果

type TypeCodec

type TypeCodec struct {
	// contains filtered or unexported fields
}

TypeCodec 提供类型编解码功能 内部使用对象池来复用字节切片,提高性能

func NewTypeCodec

func NewTypeCodec() *TypeCodec

NewTypeCodec 创建一个新的类型编解码器 返回值:

  • *TypeCodec: 类型编解码器实例

func (*TypeCodec) Decode

func (c *TypeCodec) Decode(data []byte) (interface{}, error)

Decode 将字节数组解码为原始类型 参数:

  • data: 要解码的字节数组

返回值:

  • interface{}: 解码后的值
  • error: 解码过程中的错误,如果成功则为 nil

func (*TypeCodec) DecodeBytes

func (c *TypeCodec) DecodeBytes(data []byte) ([]byte, error)

DecodeBytes 专门用于解码字节切片类型 参数:

  • data: 编码的数据

返回值:

  • []byte: 解码后的字节切片
  • error: 解码错误

func (*TypeCodec) Encode

func (c *TypeCodec) Encode(v interface{}) ([]byte, error)

Encode 将任意支持的类型编码为字节数组 编码格式:第一个字节为类型标记,后续字节为值的二进制表示

参数:

  • v: 要编码的值,必须是基本数据类型

返回值:

  • []byte: 编码后的字节数组
  • error: 编码过程中的错误,如果值类型不支持则返回错误

示例:

codec := NewTypeCodec()
data, err := codec.Encode(123)

func (*TypeCodec) EncodeTo

func (c *TypeCodec) EncodeTo(dst []byte, v interface{}) ([]byte, error)

EncodeTo 将值编码到已存在的字节切片中 参数:

  • dst: 目标字节切片
  • v: 要编码的值

返回值:

  • []byte: 编码后的字节切片
  • error: 编码错误

func (*TypeCodec) GetType

func (c *TypeCodec) GetType(data []byte) (string, error)

GetType 获取字节数组中存储的值的类型 参数:

  • data: 要检查类型的字节数组

返回值:

  • string: 类型名称
  • error: 获取类型过程中的错误,如果成功则为 nil

func (*TypeCodec) MustDecode

func (c *TypeCodec) MustDecode(data []byte) interface{}

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字节
)

支持的数据类型标记常量

type XrefEntry

type XrefEntry struct {
	Offset int64  // 偏移量
	Length uint32 // 长度
}

XrefEntry 结构体用于保存每个段的偏移量和长度

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL