goback

package module
v0.0.0-...-d2621c3 Latest Latest
Warning

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

Go to latest
Published: May 14, 2020 License: MIT Imports: 4 Imported by: 0

README

Backward Reader

This buffered reader is optimized for reading append-only files with dangling links to previous content.

Chunks of data are read starting at the end but interpretation of data takes is done from left to right. Thus, this reader can be used as bufio.Reader but internal buffering is filled with content at lower offsets.

This backward reader may be used with size endian records, where the field storing the size of the record is at the end.

Installation

go get github.com/jeroiraz/goback

Example

package main

import (
  "os"
  "github.com/jeroiraz/goback"
)

func main() {
  f, _ := os.Open("file")
  defer f.Close()

  reader, _ := goback.NewFileReader(f)

  // Read last 32 bytes from input file
  buf := make([]byte, 32)
  reader.Read(buf)
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidArguments = errors.New("goback: invalid arguments")
	ErrNoContent        = errors.New("goback: no content to be read")
	ErrInternal         = errors.New("goback: unexpected internal error")
)

ErrInvalidArguments, ErrNoContent, ErrInternal error list

Functions

This section is empty.

Types

type Reader

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

Reader implements a buffered reader however read happens in backward manner Bytes are read from left to right but offset is updaqted in descending order

func NewFileReader

func NewFileReader(f *os.File) (*Reader, error)

NewFileReader creates a reader starting from the last byte of the file

func NewFileReaderSize

func NewFileReaderSize(f *os.File, bufSize int) (*Reader, error)

NewFileReaderSize creates a backward reader with buffer size `bufSize`

func NewReader

func NewReader(ir RndReader, off int64, bufSize int) (*Reader, error)

NewReader creates a backward reader starting at offset `off` and buffer size `bufSize`

func (*Reader) Offset

func (r *Reader) Offset() int64

Offset returns the maximun number of bytes that can be read

func (*Reader) Read

func (r *Reader) Read(b []byte) (int, error)

Read reads at most `len(b)` bytes starting from current offset

func (*Reader) ReadAt

func (r *Reader) ReadAt(b []byte, off int64) (int, error)

ReadAt reads at most `len(b)` bytes starting at offset `off`

type RndReader

type RndReader interface {
	ReadAt(b []byte, off int64) (n int, err error)
}

RndReader specifies the required method for reading source data

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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