lzma

package module
v0.0.1-alpha9 Latest Latest
Warning

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

Go to latest
Published: May 2, 2024 License: GPL-3.0 Imports: 5 Imported by: 0

README

Golang LZMA reader implementation

Format specification

This package based on LZMA reader from C++ code LzmaSpec.cpp from specification.

The reader1 and reader2 has constructor specially for sevenzip package.

Benchmark

LZMA1 decompress

I have private 1GB tar file, compressed by lzma-utility from xz package.

Environment:

  • os: macOS Ventura 13.6.1 (22G313)
  • arch: amd64
  • cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz

Decompression speed:

  • 7z (21.07) - 52.37 MiB/s (+103.77%)
  • xz (5.4.3) - 43.99 MiB/s (+71.17%)
  • my (v0.0.1-alpha9) - 42.59 MiB/s (+65.71%)
  • ulikunitz/xz (orisano fork at commit 4b4c597)- 25.70 MiB/s (compared with this speed)

This reader more fast than package of ulikunitz/xz by reducing allocations, inlining hot functions and unbranching.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrCorrupted           = errors.New("corrupted")
	ErrIncorrectProperties = errors.New("incorrect LZMA properties")
	ErrResultError         = errors.New("result error")
	ErrDictOutOfRange      = errors.New("dictionary capacity is out of range")
	ErrUnexpectedLZMA2Code = errors.New("unexpected lzma2 code")
	ErrNoLZMAReader        = errors.New("no lzma reader on chunkLZMAResetState")
)

Functions

func BitTreeDecode

func BitTreeDecode(probs []prob, numBits int, rc *rangeDecoder) (uint32, error)

func BitTreeReverseDecode

func BitTreeReverseDecode(probs []prob, numBits int, rc *rangeDecoder) (uint32, error)

func DecodeDictSize

func DecodeDictSize(properties []byte) (uint32, error)

func DecodeDictSize2

func DecodeDictSize2(encodedDictSize byte) uint32

func DecodeProp

func DecodeProp(d byte) (uint8, uint8, uint8, error)

func DecodeUnpackSize

func DecodeUnpackSize(header []byte) uint64

Types

type Reader1

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

func NewReader1

func NewReader1(inStream io.ByteReader) (*Reader1, error)

func NewReader1ForReader2

func NewReader1ForReader2(inStream io.ByteReader, prop byte, unpackSize uint64, outWindow *window) (*Reader1, error)

func NewReader1ForSevenZip

func NewReader1ForSevenZip(inStream io.ByteReader, props []byte, unpackSize uint64) (*Reader1, error)

func (*Reader1) DecodeDistance

func (r *Reader1) DecodeDistance(len uint32) (uint32, error)

func (*Reader1) DecodeLiteral

func (r *Reader1) DecodeLiteral(state uint32, rep0 uint32) error

func (*Reader1) Read

func (r *Reader1) Read(p []byte) (n int, err error)

func (*Reader1) Reopen

func (r *Reader1) Reopen(inStream io.ByteReader, unpackSize uint64) error

func (*Reader1) Reset

func (r *Reader1) Reset()

type Reader2

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

func NewReader2

func NewReader2(inStream io.Reader, dictSize int) (*Reader2, error)

func NewReader2ForSevenZip

func NewReader2ForSevenZip(inStream io.Reader, props []byte) (*Reader2, error)

func (*Reader2) Read

func (r *Reader2) Read(p []byte) (n int, err error)

Jump to

Keyboard shortcuts

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