buf

package
v3.21.1+incompatible Latest Latest
Warning

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

Go to latest
Published: May 11, 2018 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package buf provides a light-weight memory allocation mechanism.

Index

Constants

View Source
const (
	// Size of a regular buffer.
	Size = 2 * 1024
)

Variables

View Source
var ErrReadTimeout = newError("IO timeout")

ErrReadTimeout is an error that happens with IO timeout.

Functions

func Copy

func Copy(reader Reader, writer Writer, options ...CopyOption) error

Copy dumps all payload from reader to writer or stops when an error occurs. It returns nil when EOF.

func ReadAllToBytes

func ReadAllToBytes(reader io.Reader) ([]byte, error)

ReadAllToBytes reads all content from the reader into a byte array, until EOF.

Types

type Buffer

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

Buffer is a recyclable allocation of a byte array. Buffer.Release() recycles the buffer into an internal buffer pool, in order to recreate a buffer more quickly.

func New

func New() *Buffer

New creates a Buffer with 0 length and 2K capacity.

func NewSize

func NewSize(capacity int32) *Buffer

NewSize creates and returns a buffer with 0 length and at least the given capacity. Capacity must be positive.

func (*Buffer) Advance

func (b *Buffer) Advance(from int32)

Advance cuts the buffer at the given position.

func (*Buffer) AppendBytes

func (b *Buffer) AppendBytes(bytes ...byte) (int, error)

AppendBytes appends one or more bytes to the end of the buffer.

func (*Buffer) AppendSupplier

func (b *Buffer) AppendSupplier(writer Supplier) error

AppendSupplier appends the content of a BytesWriter to the buffer.

func (*Buffer) Byte

func (b *Buffer) Byte(index int32) byte

Byte returns the bytes at index.

func (*Buffer) Bytes

func (b *Buffer) Bytes() []byte

Bytes returns the content bytes of this Buffer.

func (*Buffer) BytesFrom

func (b *Buffer) BytesFrom(from int32) []byte

BytesFrom returns a slice of this Buffer starting from the given position.

func (*Buffer) BytesRange

func (b *Buffer) BytesRange(from, to int32) []byte

BytesRange returns a slice of this buffer with given from and to boundary.

func (*Buffer) BytesTo

func (b *Buffer) BytesTo(to int32) []byte

BytesTo returns a slice of this Buffer from start to the given position.

func (*Buffer) Clear

func (b *Buffer) Clear()

Clear clears the content of the buffer, results an empty buffer with Len() = 0.

func (*Buffer) IsEmpty

func (b *Buffer) IsEmpty() bool

IsEmpty returns true if the buffer is empty.

func (*Buffer) IsFull

func (b *Buffer) IsFull() bool

IsFull returns true if the buffer has no more room to grow.

func (*Buffer) Len

func (b *Buffer) Len() int32

Len returns the length of the buffer content.

func (*Buffer) Read

func (b *Buffer) Read(data []byte) (int, error)

Read implements io.Reader.Read().

func (*Buffer) Release

func (b *Buffer) Release()

Release recycles the buffer into an internal buffer pool.

func (*Buffer) Reset

func (b *Buffer) Reset(writer Supplier) error

Reset resets the content of the Buffer with a supplier.

func (*Buffer) Resize

func (b *Buffer) Resize(from, to int32)

Resize cuts the buffer at the given position.

func (*Buffer) SetByte

func (b *Buffer) SetByte(index int32, value byte)

SetByte sets the byte value at index.

func (*Buffer) String

func (b *Buffer) String() string

String returns the string form of this Buffer.

func (*Buffer) Write

func (b *Buffer) Write(data []byte) (int, error)

Write implements Write method in io.Writer.

type BufferToBytesWriter

type BufferToBytesWriter struct {
	io.Writer
}

BufferToBytesWriter is a Writer that writes alloc.Buffer into underlying writer.

func NewBufferToBytesWriter

func NewBufferToBytesWriter(writer io.Writer) *BufferToBytesWriter

NewBufferToBytesWriter returns a new BufferToBytesWriter.

func (*BufferToBytesWriter) ReadFrom

func (w *BufferToBytesWriter) ReadFrom(reader io.Reader) (int64, error)

ReadFrom implements io.ReaderFrom.

func (*BufferToBytesWriter) WriteMultiBuffer

func (w *BufferToBytesWriter) WriteMultiBuffer(mb MultiBuffer) error

WriteMultiBuffer implements Writer. This method takes ownership of the given buffer.

type BufferedReader

type BufferedReader struct {
	// Reader is the underlying reader to be read from
	Reader Reader
	// Buffer is the internal buffer to be read from first
	Buffer MultiBuffer
	// Direct indicates whether or not to use the internal buffer
	Direct bool
}

BufferedReader is a Reader that keeps its internal buffer.

func (*BufferedReader) BufferedBytes

func (r *BufferedReader) BufferedBytes() int32

BufferedBytes returns the number of bytes that is cached in this reader.

func (*BufferedReader) Close

func (r *BufferedReader) Close() error

Close implements io.Closer.

func (*BufferedReader) Read

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

Read implements io.Reader. It reads from internal buffer first (if available) and then reads from the underlying reader.

func (*BufferedReader) ReadAtMost

func (r *BufferedReader) ReadAtMost(size int32) (MultiBuffer, error)

ReadAtMost returns a MultiBuffer with at most size.

func (*BufferedReader) ReadByte

func (r *BufferedReader) ReadByte() (byte, error)

ReadByte implements io.ByteReader.

func (*BufferedReader) ReadMultiBuffer

func (r *BufferedReader) ReadMultiBuffer() (MultiBuffer, error)

ReadMultiBuffer implements Reader.

func (*BufferedReader) WriteTo

func (r *BufferedReader) WriteTo(writer io.Writer) (int64, error)

WriteTo implements io.WriterTo.

type BufferedWriter

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

BufferedWriter is a Writer with internal buffer.

func NewBufferedWriter

func NewBufferedWriter(writer Writer) *BufferedWriter

NewBufferedWriter creates a new BufferedWriter.

func (*BufferedWriter) Close

func (w *BufferedWriter) Close() error

Close implements io.Closable.

func (*BufferedWriter) Flush

func (w *BufferedWriter) Flush() error

Flush flushes buffered content into underlying writer.

func (*BufferedWriter) ReadFrom

func (w *BufferedWriter) ReadFrom(reader io.Reader) (int64, error)

ReadFrom implements io.ReaderFrom.

func (*BufferedWriter) SetBuffered

func (w *BufferedWriter) SetBuffered(f bool) error

SetBuffered sets whether the internal buffer is used. If set to false, Flush() will be called to clear the buffer.

func (*BufferedWriter) Write

func (w *BufferedWriter) Write(b []byte) (int, error)

Write implements io.Writer.

func (*BufferedWriter) WriteByte

func (w *BufferedWriter) WriteByte(c byte) error

WriteByte implements io.ByteWriter.

func (*BufferedWriter) WriteMultiBuffer

func (w *BufferedWriter) WriteMultiBuffer(b MultiBuffer) error

WriteMultiBuffer implements Writer. It takes ownership of the given MultiBuffer.

type BytesToBufferReader

type BytesToBufferReader struct {
	io.Reader
	// contains filtered or unexported fields
}

BytesToBufferReader is a Reader that adjusts its reading speed automatically.

func (*BytesToBufferReader) ReadMultiBuffer

func (r *BytesToBufferReader) ReadMultiBuffer() (MultiBuffer, error)

ReadMultiBuffer implements Reader.

type CopyOption

type CopyOption func(*copyHandler)

CopyOption is an option for copying data.

func CountSize

func CountSize(sc *SizeCounter) CopyOption

CountSize is a CopyOption that sums the total size of data copied into the given SizeCounter.

func IgnoreReaderError

func IgnoreReaderError() CopyOption

IgnoreReaderError is a CopyOption that ignores errors from reader. Copy will continue in such case.

func IgnoreWriterError

func IgnoreWriterError() CopyOption

IgnoreWriterError is a CopyOption that ignores errors from writer. Copy will continue in such case.

func UpdateActivity

func UpdateActivity(timer signal.ActivityUpdater) CopyOption

UpdateActivity is a CopyOption to update activity on each data copy operation.

type MultiBuffer

type MultiBuffer []*Buffer

MultiBuffer is a list of Buffers. The order of Buffer matters.

func NewMultiBufferCap

func NewMultiBufferCap(capacity int32) MultiBuffer

NewMultiBufferCap creates a new MultiBuffer instance.

func NewMultiBufferValue

func NewMultiBufferValue(b ...*Buffer) MultiBuffer

NewMultiBufferValue wraps a list of Buffers into MultiBuffer.

func ReadAllToMultiBuffer

func ReadAllToMultiBuffer(reader io.Reader) (MultiBuffer, error)

ReadAllToMultiBuffer reads all content from the reader into a MultiBuffer, until EOF.

func ReadSizeToMultiBuffer

func ReadSizeToMultiBuffer(reader io.Reader, size int32) (MultiBuffer, error)

ReadSizeToMultiBuffer reads specific number of bytes from reader into a MultiBuffer.

func (*MultiBuffer) Append

func (mb *MultiBuffer) Append(buf *Buffer)

Append appends buffer to the end of this MultiBuffer

func (*MultiBuffer) AppendMulti

func (mb *MultiBuffer) AppendMulti(buf MultiBuffer)

AppendMulti appends a MultiBuffer to the end of this one.

func (MultiBuffer) Copy

func (mb MultiBuffer) Copy(b []byte) int

Copy copied the beginning part of the MultiBuffer into the given byte array.

func (MultiBuffer) IsEmpty

func (mb MultiBuffer) IsEmpty() bool

IsEmpty return true if the MultiBuffer has no content.

func (*MultiBuffer) Len

func (mb *MultiBuffer) Len() int32

Len returns the total number of bytes in the MultiBuffer.

func (*MultiBuffer) Read

func (mb *MultiBuffer) Read(b []byte) (int, error)

Read implements io.Reader.

func (*MultiBuffer) ReadFrom

func (mb *MultiBuffer) ReadFrom(reader io.Reader) (int64, error)

ReadFrom implements io.ReaderFrom.

func (*MultiBuffer) Release

func (mb *MultiBuffer) Release()

Release releases all Buffers in the MultiBuffer.

func (*MultiBuffer) SliceBySize

func (mb *MultiBuffer) SliceBySize(size int32) MultiBuffer

SliceBySize splits the beginning of this MultiBuffer into another one, for at most size bytes.

func (*MultiBuffer) SplitFirst

func (mb *MultiBuffer) SplitFirst() *Buffer

SplitFirst splits out the first Buffer in this MultiBuffer.

func (MultiBuffer) String

func (mb MultiBuffer) String() string

func (MultiBuffer) ToNetBuffers

func (mb MultiBuffer) ToNetBuffers() net.Buffers

ToNetBuffers converts this MultiBuffer to net.Buffers. The return net.Buffers points to the same content of the MultiBuffer.

func (*MultiBuffer) Write

func (mb *MultiBuffer) Write(b []byte) (int, error)

Write implements io.Writer.

func (*MultiBuffer) WriteMultiBuffer

func (mb *MultiBuffer) WriteMultiBuffer(b MultiBuffer) error

WriteMultiBuffer implements Writer.

func (*MultiBuffer) WriteTo

func (mb *MultiBuffer) WriteTo(writer io.Writer) (int64, error)

WriteTo implements io.WriterTo.

type Reader

type Reader interface {
	// ReadMultiBuffer reads content from underlying reader, and put it into a MultiBuffer.
	ReadMultiBuffer() (MultiBuffer, error)
}

Reader extends io.Reader with MultiBuffer.

func NewBytesToBufferReader

func NewBytesToBufferReader(reader io.Reader) Reader

NewBytesToBufferReader returns a new BytesToBufferReader.

func NewReader

func NewReader(reader io.Reader) Reader

NewReader creates a new Reader. The Reader instance doesn't take the ownership of reader.

type SizeCounter

type SizeCounter struct {
	Size int64
}

SizeCounter is for counting bytes copied by Copy().

type Supplier

type Supplier func([]byte) (int, error)

Supplier is a writer that writes contents into the given buffer.

func ReadAtLeastFrom

func ReadAtLeastFrom(reader io.Reader, size int) Supplier

ReadAtLeastFrom create a Supplier to read at least size bytes from the given io.Reader.

func ReadFrom

func ReadFrom(reader io.Reader) Supplier

ReadFrom creates a Supplier to read from a given io.Reader.

func ReadFullFrom

func ReadFullFrom(reader io.Reader, size int32) Supplier

ReadFullFrom creates a Supplier to read full buffer from a given io.Reader.

type TimeoutReader

type TimeoutReader interface {
	ReadTimeout(time.Duration) (MultiBuffer, error)
}

TimeoutReader is a reader that returns error if Read() operation takes longer than the given timeout.

type Writer

type Writer interface {
	// WriteMultiBuffer writes a MultiBuffer into underlying writer.
	WriteMultiBuffer(MultiBuffer) error
}

Writer extends io.Writer with MultiBuffer.

var (
	// Discard is a Writer that swallows all contents written in.
	Discard Writer = noOpWriter(0)

	// DiscardBytes is an io.Writer that swallows all contents written in.
	DiscardBytes io.Writer = noOpWriter(0)
)

func NewSequentialWriter

func NewSequentialWriter(writer io.Writer) Writer

NewSequentialWriter returns a Writer that write Buffers in a MultiBuffer sequentially.

func NewWriter

func NewWriter(writer io.Writer) Writer

NewWriter creates a new Writer.

Jump to

Keyboard shortcuts

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