MCPcopy Index your code
hub / github.com/SaveTheRbtz/zstd-seekable-format-go

github.com/SaveTheRbtz/zstd-seekable-format-go @v0.7.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.7.1 ↗ · + Follow
122 symbols 402 edges 20 files 35 documented · 29% 1 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

License GoDoc Build Status Go Report

ZSTD seekable compression format implementation in Go

Seekable ZSTD compression format implemented in Golang.

This library provides a random access reader (using uncompressed file offsets) for ZSTD-compressed streams. This can be used for creating transparent compression layers. Coupled with Content Defined Chunking (CDC) it can also be used as a robust de-duplication layer.

Installation

go get -u github.com/SaveTheRbtz/zstd-seekable-format-go/pkg

Using the seekable format

Writing is done through the Writer interface:

import (
    "github.com/klauspost/compress/zstd"
    seekable "github.com/SaveTheRbtz/zstd-seekable-format-go/pkg"
)

enc, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedFastest))
if err != nil {
    log.Fatal(err)
}
defer enc.Close()

w, err := seekable.NewWriter(f, enc)
if err != nil {
    log.Fatal(err)
}

// Write data in chunks.
for _, b := range [][]byte{[]byte("Hello"), []byte(" "), []byte("World!")} {
    _, err = w.Write(b)
    if err != nil {
        log.Fatal(err)
    }
}

// Close and flush seek table.
err = w.Close()
if err != nil {
    log.Fatal(err)
}

NB! Do not forget to call Close since it is responsible for flushing the seek table.

Reading can either be done through ReaderAt interface:

dec, err := zstd.NewReader(nil)
if err != nil {
    log.Fatal(err)
}
defer dec.Close()

r, err := seekable.NewReader(f, dec)
if err != nil {
    log.Fatal(err)
}
defer r.Close()

ello := make([]byte, 4)
// ReaderAt
r.ReadAt(ello, 1)
if !bytes.Equal(ello, []byte("ello")) {
    log.Fatalf("%+v != ello", ello)
}

Or through the ReadSeeker:

world := make([]byte, 5)
// Seeker
r.Seek(-6, io.SeekEnd)
// Reader
r.Read(world)
if !bytes.Equal(world, []byte("World")) {
    log.Fatalf("%+v != World", world)
}

Seekable format utilizes ZSTD skippable frames so it is a valid ZSTD stream:

// Standard ZSTD Reader
f.Seek(0, io.SeekStart)
dec, err := zstd.NewReader(f)
if err != nil {
    log.Fatal(err)
}
defer dec.Close()

all, err := io.ReadAll(dec)
if err != nil {
    log.Fatal(err)
}
if !bytes.Equal(all, []byte("Hello World!")) {
    log.Fatalf("%+v != Hello World!", all)
}

Extension points exported contracts — how you extend this code

REnvironment (Interface)
REnvironment can be used to inject a custom file reader that is different from normal ReadSeeker. This is useful when, f [3 …
pkg/env/environments.go
Decoder (Interface)
Decoder is a byte-oriented API that is useful for cases where wrapping io.ReadSeeker is not desirable. [1 implementers]
pkg/decoder.go
Encoder (Interface)
Encoder is a byte-oriented API that is useful where wrapping io.Writer is not desirable. [1 implementers]
pkg/encoder.go
ZSTDDecoder (Interface)
ZSTDDecoder is the decompressor. Tested with github.com/klauspost/compress/zstd.
pkg/reader.go
ZSTDEncoder (Interface)
ZSTDEncoder is the compressor. Tested with github.com/klauspost/compress/zstd.
pkg/writer.go
WEnvironment (Interface)
WEnvironment can be used to inject a custom file writer that is different from normal WriteCloser. This is useful when, [2 …
pkg/env/environments.go
Reader (Interface)
(no doc) [1 implementers]
pkg/reader.go
Writer (Interface)
(no doc) [1 implementers]
pkg/writer.go

Core symbols most depended-on inside this repo

Close
called by 28
pkg/reader.go
Read
called by 23
pkg/reader.go
Seek
called by 19
pkg/reader.go
Write
called by 13
pkg/writer.go
ReadAt
called by 12
pkg/reader.go
NewReader
called by 12
pkg/reader.go
Close
called by 10
pkg/writer.go
UnmarshalBinary
called by 8
pkg/seekable.go

Shape

Method 66
Function 30
Struct 16
Interface 8
FuncType 2

Languages

Go100%

Modules by API surface

pkg/reader.go23 symbols
pkg/reader_test.go19 symbols
pkg/decoder.go15 symbols
pkg/writer.go13 symbols
pkg/seekable.go13 symbols
pkg/env/environments.go7 symbols
pkg/writer_test.go6 symbols
pkg/encoder.go6 symbols
pkg/writer_options.go3 symbols
pkg/seekable_test.go3 symbols
pkg/reader_options.go3 symbols
pkg/env/frame_offset.go3 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add zstd-seekable-format-go \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page