Source

interface Source : Closeable

Supplies a stream of bytes. Use this interface to read data from wherever it's located: from the network, storage, or a buffer in memory. Sources may be layered to transform supplied data, such as to decompress, decrypt, or remove protocol framing.

Most applications shouldn't operate on a source directly, but rather on a BufferedSource which is both more efficient and more convenient. Use buffer to wrap any source with a buffer.

Sources are easy to test: just use a Buffer in your tests, and fill it with the data your application is to read.

Comparison with InputStream

This interface is functionally equivalent to java.io.InputStream.

InputStream requires multiple layers when consumed data is heterogeneous: a DataInputStream for primitive values, a BufferedInputStream for buffering, and InputStreamReader for strings. This library uses BufferedSource for all of the above.

Source avoids the impossible-to-implement java.io.InputStream.available method. Instead callers specify how many bytes they require.

Source omits the unsafe-to-compose java.io.InputStream.mark state that's tracked by InputStream; instead, callers just buffer what they need.

When implementing a source, you don't need to worry about the java.io.InputStream.read method that is awkward to implement efficiently and returns one of 257 possible values.

And source has a stronger skip method: BufferedSource.skip won't return prematurely.

Interop with InputStream

Use source to adapt an InputStream to a source. Use BufferedSource.inputStream to adapt a source to an InputStream.

Inheritors

Functions

Link copied to clipboard

Returns a new source that buffers reads from source. The returned source will perform bulk reads into its in-memory buffer. Use this wherever you read a source to get an ergonomic and efficient access to data.

Link copied to clipboard

Returns a source that uses cipher to encrypt or decrypt this.

Link copied to clipboard
abstract override fun close()

Closes this source and releases the resources held by this source. It is an error to read a closed source. It is safe to close a source more than once.

Link copied to clipboard
inline fun Source.gzip(): GzipSource

Returns a GzipSource that gzip-decompresses this Source while reading.

Link copied to clipboard

Returns a source that uses digest to hash this.

Returns a source that uses mac to hash this.

Link copied to clipboard
inline fun Source.inflate(inflater: Inflater = Inflater()): InflaterSource

Returns an InflaterSource that DEFLATE-decompresses this Source while reading.

Link copied to clipboard
abstract fun read(sink: Buffer, byteCount: Long): Long

Removes at least 1, and up to byteCount bytes from this and appends them to sink. Returns the number of bytes read, or -1 if this source is exhausted.

Link copied to clipboard
abstract fun timeout(): Timeout

Returns the timeout for this source.