47 lines · 1.3 KB · Go
RawDownload
// Package chunkedreader provides functionality for reading a stream in chunks.package chunkedreader import (	"context"	"errors"	"io" 	"github.com/rclone/rclone/fs") // io related errors returned by ChunkedReadervar (	ErrorFileClosed  = errors.New("file already closed")	ErrorInvalidSeek = errors.New("invalid seek position")) // ChunkedReader describes what a chunked reader can do.type ChunkedReader interface {	io.Reader	io.Seeker	io.Closer	fs.RangeSeeker	Open() (ChunkedReader, error)} // New returns a ChunkedReader for the Object.//// An initialChunkSize of <= 0 will disable chunked reading.// If maxChunkSize is greater than initialChunkSize, the chunk size will be// doubled after each chunk read with a maximum of maxChunkSize.// A Seek or RangeSeek will reset the chunk size to it's initial valuefunc New(ctx context.Context, o fs.Object, initialChunkSize int64, maxChunkSize int64, streams int) ChunkedReader {	if initialChunkSize <= 0 {		initialChunkSize = -1	}	if maxChunkSize != -1 && maxChunkSize < initialChunkSize {		maxChunkSize = initialChunkSize	}	if streams < 0 {		streams = 0	}	if streams <= 1 || o.Size() < 0 {		return newSequential(ctx, o, initialChunkSize, maxChunkSize)	}	return newParallel(ctx, o, initialChunkSize, streams)}