# module IO::Buffered

##
Overview

The `IO::Buffered` mixin enhances an `IO` with input/output buffering.

The buffering behaviour can be turned on/off with the `#sync=` and `#read_buffering=` methods.

Additionally, several methods, like `#gets`, are implemented in a more efficient way.

##
Direct including types

- Flate::Reader
- Gzip::Reader
- IO::FileDescriptor
- OpenSSL::SSL::Socket
- Socket
- Zlib::Reader

##
Defined in:

##
Instance Method Summary

- #buffer_size

  Return the buffer size used

- #buffer_size=(value)

  Set the buffer size of both the read and write buffer Cannot be changed after any of the buffers have been allocated

- #close : Nil

  Flushes and closes the underlying `IO`.

- #flush

  Flushes any buffered data and the underlying `IO`.

- #peek : Bytes?

  Returns the bytes hold in the read buffer.

- #read(slice : Bytes)

  Buffered implementation of `IO#read(slice)`.

- #read_buffering=(read_buffering)

  Turns on/off `IO` read buffering.

- #read_buffering?

  Determines whether this `IO` buffers reads.

- #rewind

  Rewinds the underlying `IO`.

- #sync=(sync)

  Turns on/off `IO` write buffering.

- #sync?

  Determines if this `IO` does write buffering.

- #unbuffered_close

  Closes the wrapped `IO`.

- #unbuffered_flush

  Flushes the wrapped `IO`.

- #unbuffered_read(slice : Bytes)

  Reads at most slice.size bytes from the wrapped `IO` into slice.

- #unbuffered_rewind

  Rewinds the wrapped `IO`.

- #unbuffered_write(slice : Bytes)

  Writes at most slice.size bytes from slice into the wrapped `IO`.

- #write(slice : Bytes) : Nil

  Buffered implementation of `IO#write(slice)`.

##
Instance Method Detail

def buffer_size #

Return the buffer size used

def buffer_size=(value) #

Set the buffer size of both the read and write buffer Cannot be changed after any of the buffers have been allocated

def close : Nil #

Flushes and closes the underlying `IO`.

def flush #

Flushes any buffered data and the underlying `IO`. Returns `self`.

def peek : Bytes? #

Returns the bytes hold in the read buffer.

This method only performs a read to return peek data if the current buffer is empty: otherwise no read is performed and whatever is in the buffer is returned.

def read(slice : Bytes) #

Buffered implementation of `IO#read(slice)`.

def read_buffering=(read_buffering) #

Turns on/off `IO` read buffering.

def read_buffering? #

Determines whether this `IO` buffers reads.

def rewind #

Rewinds the underlying `IO`. Returns `self`.

def sync=(sync) #

Turns on/off `IO` write buffering. When sync is set to `true`, no buffering will be done (that is, writing to this `IO` is immediately synced to the underlying `IO`).

def sync? #

Determines if this `IO` does write buffering. If `true`, no buffering is done.

abstract def unbuffered_close #

Closes the wrapped `IO`.

abstract def unbuffered_flush #

Flushes the wrapped `IO`.

abstract def unbuffered_read(slice : Bytes) #

Reads at most slice.size bytes from the wrapped `IO` into slice. Returns the number of bytes read.

abstract def unbuffered_rewind #

Rewinds the wrapped `IO`.

abstract def unbuffered_write(slice : Bytes) #

Writes at most slice.size bytes from slice into the wrapped `IO`. Returns the number of bytes written.

def write(slice : Bytes) : Nil #

Buffered implementation of `IO#write(slice)`.