Documentation
¶
Overview ¶
Package buf provides a light-weight memory allocation mechanism.
Index ¶
- Constants
- Variables
- func Copy(reader Reader, writer Writer, options ...CopyOption) error
- func CopyOnceTimeout(reader Reader, writer Writer, timeout time.Duration) error
- func IsReadError(err error) bool
- func IsWriteError(err error) bool
- func MergeMulti(dest MultiBuffer, src MultiBuffer) (MultiBuffer, MultiBuffer)
- func ReadAllToBytes(reader io.Reader) ([]byte, error)
- func SplitFirst(mb MultiBuffer) (MultiBuffer, *Buffer)
- func SplitSize(mb MultiBuffer, size int32) (MultiBuffer, MultiBuffer)
- func Unwrap(unwrapReader UnwrapReader) any
- func WriteAllBytes(writer io.Writer, payload []byte) error
- type Buffer
- func (b *Buffer) AdvanceStart(from int32)
- func (b *Buffer) Available() int32
- func (b *Buffer) Byte(index int32) byte
- func (b *Buffer) Bytes() []byte
- func (b *Buffer) BytesFrom(from int32) []byte
- func (b *Buffer) BytesRange(from, to int32) []byte
- func (b *Buffer) BytesTo(to int32) []byte
- func (b *Buffer) Cap() int32
- func (b *Buffer) Clear()
- func (b *Buffer) Clone() *Buffer
- func (b *Buffer) Extend(n int32) []byte
- func (b *Buffer) IsEmpty() bool
- func (b *Buffer) IsFull() bool
- func (b *Buffer) Len() int32
- func (b *Buffer) Read(data []byte) (int, error)
- func (b *Buffer) ReadByte() (byte, error)
- func (b *Buffer) ReadBytes(length int32) ([]byte, error)
- func (b *Buffer) ReadFullFrom(reader io.Reader, size int32) (int64, error)
- func (b *Buffer) ReadOnce(reader io.Reader) (int64, error)
- func (b *Buffer) ReadOnceWithSize(reader io.Reader, size int32) (int64, error)
- func (b *Buffer) Release()
- func (b *Buffer) Resize(from, to int32)
- func (b *Buffer) RetreatStart(v int32)
- func (b *Buffer) SetByte(index int32, value byte)
- func (b *Buffer) String() string
- func (b *Buffer) Write(data []byte) (int, error)
- func (b *Buffer) WriteByte(v byte) error
- func (b *Buffer) WriteString(s string) (int, error)
- func (b *Buffer) Zero(from, to int32)
- func (b *Buffer) ZeroAll()
- type BufferToBytesWriter
- type BufferedReader
- func (r *BufferedReader) BufferedBytes() int32
- func (r *BufferedReader) Close() error
- func (r *BufferedReader) OkayToUnwrapReader() int
- func (r *BufferedReader) Read(b []byte) (int, error)
- func (r *BufferedReader) ReadAtMost(size int32) (MultiBuffer, error)
- func (r *BufferedReader) ReadByte() (byte, error)
- func (r *BufferedReader) ReadMultiBuffer() (MultiBuffer, error)
- func (r *BufferedReader) UnwrapReader() any
- func (r *BufferedReader) WriteTo(writer io.Writer) (int64, error)
- type BufferedWriter
- func (w *BufferedWriter) Buffered() bool
- func (w *BufferedWriter) Close() error
- func (w *BufferedWriter) CloseWrite() error
- func (w *BufferedWriter) Flush() error
- func (w *BufferedWriter) OkayToUnwrapWriter() int
- func (w *BufferedWriter) ReadFrom(reader io.Reader) (int64, error)
- func (w *BufferedWriter) SetBuffered(f bool) error
- func (w *BufferedWriter) UnwrapWriter() any
- func (w *BufferedWriter) Write(b []byte) (int, error)
- func (w *BufferedWriter) WriteByte(c byte) error
- func (w *BufferedWriter) WriteMultiBuffer(b MultiBuffer) error
- type CloseWriter
- type CopyOption
- type DdlReaderWriter
- type DeadlineReader
- type LengthPacketReader
- type MemoryReader
- type MultiBuffer
- func Compact(mb MultiBuffer) MultiBuffer
- func MergeBytes(dest MultiBuffer, src []byte) MultiBuffer
- func ReadFrom(reader io.Reader) (MultiBuffer, error)
- func ReleaseMulti(mb MultiBuffer) MultiBuffer
- func RemoveEmptyBuffer(mb MultiBuffer) MultiBuffer
- func SplitBytes(mb MultiBuffer, b []byte) (MultiBuffer, int)
- func SplitFirstBytes(mb MultiBuffer, p []byte) (MultiBuffer, int)
- func WriteMultiBuffer(writer io.Writer, mb MultiBuffer) (MultiBuffer, error)
- type MultiBufferContainer
- func (c *MultiBufferContainer) Close() error
- func (*MultiBufferContainer) CloseWrite() error
- func (c *MultiBufferContainer) Read(b []byte) (int, error)
- func (c *MultiBufferContainer) ReadMultiBuffer() (MultiBuffer, error)
- func (c *MultiBufferContainer) Write(b []byte) (int, error)
- func (c *MultiBufferContainer) WriteMultiBuffer(b MultiBuffer) error
- type MultiLengthPacketWriter
- type NoOpWriter
- type PacketReader
- type RW
- type RWD
- type ReadError
- type ReadVReader
- type Reader
- type ReaderWriter
- type RingBuffer
- func (rb *RingBuffer[T]) Add(value T)
- func (rb *RingBuffer[T]) Clear()
- func (rb *RingBuffer[T]) Count() int
- func (rb *RingBuffer[T]) GetAll() []T
- func (rb *RingBuffer[T]) IsEmpty() bool
- func (rb *RingBuffer[T]) IsFull() bool
- func (rb *RingBuffer[T]) Peek() (T, bool)
- func (rb *RingBuffer[T]) Read(slice []T) (int, error)
- func (rb *RingBuffer[T]) ReadOldestValue() (T, bool)
- type SecondDdlReaderWriter
- type SequentialWriter
- type SetDeadline
- type SingleReader
- type SizeCounter
- type SizedReader
- type TimeoutReader
- type UnwrapReader
- type UnwrapReaderReader
- type UnwrapWriter
- type WriteError
- type Writer
Constants ¶
const ( Offset = 60 // default buffer BufferSize BufferSize = 1024 * 8 // available to write. Size = BufferSize - Offset )
Variables ¶
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) DiscardReader NoOpWriter = NoOpWriter(0) )
var ErrNotTimeoutReader = errors.New("not a TimeoutReader")
var ErrReadTimeout = errors.New("IO timeout")
ErrReadTimeout is an error that happens with IO timeout.
var ErrWriteTimeout = errors.New("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 or EOF in which case it returns nil. An error is either failure to read or failure to write
func CopyOnceTimeout ¶
func IsReadError ¶
IsReadError returns true if the error in Copy() comes from reading.
func IsWriteError ¶
IsWriteError returns true if the error in Copy() comes from writing.
func MergeMulti ¶
func MergeMulti(dest MultiBuffer, src MultiBuffer) (MultiBuffer, MultiBuffer)
MergeMulti merges content from src to dest, and returns the new address of dest and src
func ReadAllToBytes ¶
ReadAllToBytes reads all content from the reader into a byte array, until EOF.
func SplitFirst ¶
func SplitFirst(mb MultiBuffer) (MultiBuffer, *Buffer)
SplitFirst splits the first Buffer from the beginning of the MultiBuffer.
func SplitSize ¶
func SplitSize(mb MultiBuffer, size int32) (MultiBuffer, MultiBuffer)
SplitSize splits the beginning of the MultiBuffer into another one, for at most size bytes. The latter MultiBuffer is the one with size bytes.
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 NewWithRelease ¶
func NewWithSize ¶
NewWithSize creates a Buffer with 0 length and capacity with at least the given size.
func ReadBuffer ¶
ReadBuffer reads a Buffer from the given reader.
func StackNew ¶
func StackNew() Buffer
StackNew creates a new Buffer object on stack. This method is for buffers that is released in the same function.
func (*Buffer) AdvanceStart ¶
AdvanceStart cuts the buffer at the given position. Changes [b.start]
func (*Buffer) BytesFrom ¶
BytesFrom returns a slice of this Buffer starting from the given position.
func (*Buffer) BytesRange ¶
BytesRange returns a slice of this buffer with given from and to boundary.
func (*Buffer) Clear ¶
func (b *Buffer) Clear()
Clear clears the content of the buffer, results an empty buffer with Len() = 0.
func (*Buffer) Extend ¶
Extend increases the buffer size by n bytes, and returns the extended part. It panics if result size is larger than buf.Size. change b.end
func (*Buffer) ReadFullFrom ¶
ReadFullFrom reads exact size of bytes from given reader, or until error occurs.
func (*Buffer) ReadOnceWithSize ¶
func (*Buffer) Release ¶
func (b *Buffer) Release()
Release recycles the buffer.v into an internal buffer pool and resets start and end to 0.
func (*Buffer) RetreatStart ¶
RetreatStart moves the buffer start position back by v bytes. If retreat cannot be done because of out of bound, a new slice is allocated from the pool and it replace the exsiting one. If v is negative, it will be ignored.
func (*Buffer) WriteString ¶
WriteString implements io.StringWriter.
type BufferToBytesWriter ¶
BufferToBytesWriter is a Writer that writes alloc.Buffer into underlying writer. used in tcp. Writer is typically a net.Conn
func (*BufferToBytesWriter) CloseWrite ¶
func (w *BufferToBytesWriter) CloseWrite() error
func (*BufferToBytesWriter) OkayToUnwrapWriter ¶
func (w *BufferToBytesWriter) OkayToUnwrapWriter() int
func (*BufferToBytesWriter) ReadFrom ¶
func (w *BufferToBytesWriter) ReadFrom(reader io.Reader) (int64, error)
ReadFrom implements io.ReaderFrom.
func (*BufferToBytesWriter) UnwrapWriter ¶
func (w *BufferToBytesWriter) UnwrapWriter() any
func (*BufferToBytesWriter) WriteMultiBuffer ¶
func (w *BufferToBytesWriter) WriteMultiBuffer(mb MultiBuffer) error
WriteMultiBuffer implements Writer. This method takes ownership of the given buffer. transfer multi buffer to net.buffers and use net.Buffers.WriteTo to write to the underlying io.writer
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
// Spliter is a function to read bytes from MultiBuffer
Spliter func(MultiBuffer, []byte) (MultiBuffer, int)
}
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
func (*BufferedReader) OkayToUnwrapReader ¶
func (r *BufferedReader) OkayToUnwrapReader() int
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. If the internal buffer is empty, it first reads a MultiBuffer from the underlying reader, then split the MultiBuffer based on b
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) UnwrapReader ¶
func (r *BufferedReader) UnwrapReader() any
type BufferedWriter ¶
BufferedWriter is a Writer with internal buffer.
func NewBufferedWriter ¶
func NewBufferedWriter(writer Writer) *BufferedWriter
NewBufferedWriter creates a new BufferedWriter.
func (*BufferedWriter) Buffered ¶
func (w *BufferedWriter) Buffered() bool
func (*BufferedWriter) CloseWrite ¶
func (w *BufferedWriter) CloseWrite() error
func (*BufferedWriter) Flush ¶
func (w *BufferedWriter) Flush() error
Flush flushes buffered content into underlying writer.
func (*BufferedWriter) OkayToUnwrapWriter ¶
func (w *BufferedWriter) OkayToUnwrapWriter() int
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) UnwrapWriter ¶
func (w *BufferedWriter) UnwrapWriter() any
func (*BufferedWriter) Write ¶
func (w *BufferedWriter) Write(b []byte) (int, error)
Write implements io.Writer. If w.buffered is true, the given bytes will be written into internal buffer, if after writing the buffer is full, it will be flushed into underlying 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. If w.buffered is true, the given MultiBuffer will be written into internal buffer, if after writing the buffer is full, it will be flushed into underlying writer; if the buffer is not full, that's it, the buffer is not written into the underlying writer.
type CloseWriter ¶
type CloseWriter interface {
CloseWrite() error
}
type CopyOption ¶
type CopyOption func(*copySetting)
func AddToStatCounter ¶
func AddToStatCounter(sc *atomic.Uint64) CopyOption
AddToStatCounter a CopyOption add to stat counter
func CountSize ¶
func CountSize(sc *SizeCounter) CopyOption
CountSize is a CopyOption that sums the total size of data copied into the given SizeCounter.
func DataHandler ¶
func DataHandler(dh dataHandler) CopyOption
func OnEOFCopyOption ¶
func OnEOFCopyOption(f func()) CopyOption
func OnEndCopyOption ¶
func OnEndCopyOption(f func()) CopyOption
func UpdateActivityCopyOption ¶
func UpdateActivityCopyOption(ac *signal.ActivityChecker) CopyOption
type DdlReaderWriter ¶
type DdlReaderWriter interface {
ReaderWriter
SetReadDeadline(time.Time) error
}
type LengthPacketReader ¶
func NewLengthPacketReader ¶
func NewLengthPacketReader(reader io.Reader) *LengthPacketReader
func (*LengthPacketReader) ReadMultiBuffer ¶
func (r *LengthPacketReader) ReadMultiBuffer() (MultiBuffer, error)
type MemoryReader ¶
type MemoryReader struct {
// contains filtered or unexported fields
}
all data read from reader will be saved to history until stop
func NewMemoryReader ¶
func NewMemoryReader(reader io.Reader) *MemoryReader
func (*MemoryReader) History ¶
func (c *MemoryReader) History() MultiBuffer
func (*MemoryReader) OkayToUnwrapReader ¶
func (c *MemoryReader) OkayToUnwrapReader() int
func (*MemoryReader) StopMemorize ¶
func (c *MemoryReader) StopMemorize()
type MultiBuffer ¶
type MultiBuffer []*Buffer
MultiBuffer is a list of Buffers. The order of Buffer matters.
func Compact ¶
func Compact(mb MultiBuffer) MultiBuffer
Compact returns another MultiBuffer by merging all content of the given one together.
func MergeBytes ¶
func MergeBytes(dest MultiBuffer, src []byte) MultiBuffer
MergeBytes merges the given bytes into MultiBuffer and return the new address of the merged MultiBuffer.
func ReadFrom ¶
func ReadFrom(reader io.Reader) (MultiBuffer, error)
ReadFrom reads all content from reader until EOF.
func ReleaseMulti ¶
func ReleaseMulti(mb MultiBuffer) MultiBuffer
ReleaseMulti releases all content of the MultiBuffer, and returns an empty MultiBuffer.
func RemoveEmptyBuffer ¶
func RemoveEmptyBuffer(mb MultiBuffer) MultiBuffer
RemoveEmptyBuffer removes empty buffers from the given MultiBuffer. The removed buffers are released.
func SplitBytes ¶
func SplitBytes(mb MultiBuffer, b []byte) (MultiBuffer, int)
SplitBytes splits the given amount of bytes from the beginning of the MultiBuffer. It returns the new address of MultiBuffer leftover, and number of bytes written into the input byte slice. bytes in mb are written into b
func SplitFirstBytes ¶
func SplitFirstBytes(mb MultiBuffer, p []byte) (MultiBuffer, int)
SplitFirstBytes splits the first buffer from MultiBuffer, and then copy its content into the given slice.
func WriteMultiBuffer ¶
func WriteMultiBuffer(writer io.Writer, mb MultiBuffer) (MultiBuffer, error)
WriteMultiBuffer writes all buffers from the MultiBuffer to the Writer one by one, and return error if any, with leftover MultiBuffer.
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 returns 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) String ¶
func (mb MultiBuffer) String() string
String returns the content of the MultiBuffer in string.
type MultiBufferContainer ¶
type MultiBufferContainer struct {
MultiBuffer
}
MultiBufferContainer is a ReadWriteCloser wrapper over MultiBuffer.
func (*MultiBufferContainer) Close ¶
func (c *MultiBufferContainer) Close() error
Close implements io.Closer.
func (*MultiBufferContainer) CloseWrite ¶
func (*MultiBufferContainer) CloseWrite() error
func (*MultiBufferContainer) Read ¶
func (c *MultiBufferContainer) Read(b []byte) (int, error)
Read implements io.Reader.
func (*MultiBufferContainer) ReadMultiBuffer ¶
func (c *MultiBufferContainer) ReadMultiBuffer() (MultiBuffer, error)
ReadMultiBuffer implements Reader.
func (*MultiBufferContainer) Write ¶
func (c *MultiBufferContainer) Write(b []byte) (int, error)
Write implements io.Writer.
func (*MultiBufferContainer) WriteMultiBuffer ¶
func (c *MultiBufferContainer) WriteMultiBuffer(b MultiBuffer) error
WriteMultiBuffer implements Writer.
type MultiLengthPacketWriter ¶
type MultiLengthPacketWriter struct {
Writer
}
create a new mb for each buffer in the old multi buffer, write the length of the buffer first, then write the buffer
func NewMultiLengthPacketWriter ¶
func NewMultiLengthPacketWriter(writer Writer) *MultiLengthPacketWriter
func (*MultiLengthPacketWriter) WriteMultiBuffer ¶
func (w *MultiLengthPacketWriter) WriteMultiBuffer(mb MultiBuffer) error
type NoOpWriter ¶
type NoOpWriter byte
func (NoOpWriter) CloseWrite ¶
func (NoOpWriter) CloseWrite() error
func (NoOpWriter) ReadFullFrom ¶
func (NoOpWriter) WriteMultiBuffer ¶
func (NoOpWriter) WriteMultiBuffer(b MultiBuffer) error
type PacketReader ¶
PacketReader is a Reader that read one Buffer every time. If no pakcet has arrived, it keeps waiting until one arrives.
func (*PacketReader) ReadMultiBuffer ¶
func (r *PacketReader) ReadMultiBuffer() (MultiBuffer, error)
ReadMultiBuffer implements Reader.
type RWD ¶
type RWD struct {
Reader
Writer
SetDeadline
}
func (*RWD) OkayToUnwrapReader ¶
func (*RWD) OkayToUnwrapWriter ¶
func (*RWD) UnwrapReader ¶
func (*RWD) UnwrapWriter ¶
type ReadError ¶ added in v1.0.1
type ReadError struct {
// contains filtered or unexported fields
}
type ReadVReader ¶
ReadVReader is a Reader that uses readv(2) syscall to read data.
func NewReadVReader ¶
func NewReadVReader(reader io.Reader, rawConn syscall.RawConn) *ReadVReader
NewReadVReader creates a new ReadVReader.
func (*ReadVReader) OkayToUnwrapReader ¶
func (r *ReadVReader) OkayToUnwrapReader() int
func (*ReadVReader) ReadMultiBuffer ¶
func (r *ReadVReader) ReadMultiBuffer() (MultiBuffer, error)
ReadMultiBuffer implements Reader.
func (*ReadVReader) UnwrapReader ¶
func (r *ReadVReader) UnwrapReader() any
type Reader ¶
type Reader interface {
// Same as io.Reader.Read, MultiBuffer might be not empty and error is not-nil
ReadMultiBuffer() (MultiBuffer, error)
}
Reader extends io.Reader with MultiBuffer.
func NewPacketReader ¶
NewPacketReader creates a new PacketReader based on the given reader. read one buffer every time
func NewReader ¶
NewReader creates a new Reader. From a io.Reader to a buf.Reader The Reader instance doesn't take the ownership of reader.
func NewSizedReader ¶
func NewSizedReader(reader *BufferedReader) Reader
type ReaderWriter ¶
type RingBuffer ¶
type RingBuffer[T any] struct { // contains filtered or unexported fields }
func NewRingBuffer ¶
func NewRingBuffer[T any](size int) *RingBuffer[T]
func (*RingBuffer[T]) Add ¶
func (rb *RingBuffer[T]) Add(value T)
Add adds a new value to the buffer
func (*RingBuffer[T]) Clear ¶
func (rb *RingBuffer[T]) Clear()
func (*RingBuffer[T]) Count ¶
func (rb *RingBuffer[T]) Count() int
Count returns the current number of items in the buffer
func (*RingBuffer[T]) GetAll ¶
func (rb *RingBuffer[T]) GetAll() []T
GetAll returns all values in order from oldest to newest
func (*RingBuffer[T]) IsEmpty ¶
func (rb *RingBuffer[T]) IsEmpty() bool
IsEmpty returns true if the buffer is empty
func (*RingBuffer[T]) IsFull ¶
func (rb *RingBuffer[T]) IsFull() bool
IsFull returns true if the buffer is full
func (*RingBuffer[T]) Peek ¶
func (rb *RingBuffer[T]) Peek() (T, bool)
Peek returns the oldest value without removing it
func (*RingBuffer[T]) Read ¶
func (rb *RingBuffer[T]) Read(slice []T) (int, error)
func (*RingBuffer[T]) ReadOldestValue ¶
func (rb *RingBuffer[T]) ReadOldestValue() (T, bool)
ReadOldestValue reads and removes the oldest value from the buffer Returns the value and true if successful, zero value and false if buffer is empty
type SecondDdlReaderWriter ¶
type SecondDdlReaderWriter struct {
DdlReaderWriter
Mb MultiBuffer
}
func NewSecondDdl ¶
func NewSecondDdl(rw DdlReaderWriter, mb MultiBuffer) *SecondDdlReaderWriter
func (*SecondDdlReaderWriter) ReadMultiBuffer ¶
func (r *SecondDdlReaderWriter) ReadMultiBuffer() (MultiBuffer, error)
type SequentialWriter ¶
SequentialWriter is a Writer that writes MultiBuffer sequentially into the underlying io.Writer. Write buffer one by one
func (*SequentialWriter) CloseWrite ¶
func (w *SequentialWriter) CloseWrite() error
func (*SequentialWriter) OkayToUnwrapWriter ¶
func (w *SequentialWriter) OkayToUnwrapWriter() int
func (*SequentialWriter) UnwrapWriter ¶
func (w *SequentialWriter) UnwrapWriter() any
func (*SequentialWriter) WriteMultiBuffer ¶
func (w *SequentialWriter) WriteMultiBuffer(mb MultiBuffer) error
WriteMultiBuffer implements Writer.
type SetDeadline ¶
type SingleReader ¶
SingleReader is a Reader that read one Buffer every time.
func (*SingleReader) OkayToUnwrapReader ¶
func (r *SingleReader) OkayToUnwrapReader() int
func (*SingleReader) ReadMultiBuffer ¶
func (r *SingleReader) ReadMultiBuffer() (MultiBuffer, error)
ReadMultiBuffer implements Reader.
func (*SingleReader) UnwrapReader ¶
func (r *SingleReader) UnwrapReader() any
type SizeCounter ¶
type SizeCounter struct {
Size int64
}
SizeCounter is for counting bytes copied by Copy().
type SizedReader ¶
type SizedReader struct {
// contains filtered or unexported fields
}
implement buf.Reader read 2 bytes (uint16, the num of bytes) from the reader first, then read "the num of bytes" from the reader, after this, further ReadMultiBuffer() will return io.EOF
func (*SizedReader) ReadMultiBuffer ¶
func (r *SizedReader) ReadMultiBuffer() (MultiBuffer, error)
type TimeoutReader ¶
type TimeoutReader interface {
ReadMultiBufferTimeout(time.Duration) (MultiBuffer, error)
}
TimeoutReader is a reader that returns error if Read() operation takes longer than the given timeout.
type UnwrapReader ¶
type UnwrapReaderReader ¶
type UnwrapReaderReader struct {
Reader Reader
Unwrapped bool
UnwrapReader UnwrapReader
}
UnwrapReader is non-nil until unwrapped. For using readv
func (*UnwrapReaderReader) ReadMultiBuffer ¶
func (r *UnwrapReaderReader) ReadMultiBuffer() (MultiBuffer, error)
type UnwrapWriter ¶
type WriteError ¶ added in v1.0.1
type WriteError struct {
// contains filtered or unexported fields
}
func (WriteError) Error ¶ added in v1.0.1
func (e WriteError) Error() string
func (WriteError) Inner ¶ added in v1.0.1
func (e WriteError) Inner() error
func (WriteError) UnWrap ¶ added in v1.0.1
func (e WriteError) UnWrap() error
type Writer ¶
type Writer interface {
// WriteMultiBuffer writes a MultiBuffer into underlying writer.
// Writer releases the MultiBuffer anyway(even if it fails).
WriteMultiBuffer(MultiBuffer) error
CloseWrite() error
}
Writer extends io.Writer with MultiBuffer.