#io-stream #buffered #fork #read-write #half #separately #chrichton

buf_stream

Buffered I/O for streams where each read/write half is separately buffered. Fork of bufstream.

1 unstable release

Uses old Rust 2015

0.2.0 Aug 22, 2020

#11 in #half

MIT/Apache

13KB
164 lines

buf_stream

Buffered I/O streams for reading/writing

About

buf_stream is a fork of bufstream by Alex Chrichton.

Usage

[dependencies]
buf_stream = "0.2"

Tokio

There is support for tokio's AsyncRead + AsyncWrite traits through the tokio feature. When using this crate with asynchronous IO, make sure to properly flush the stream before dropping it since IO during drop may cause panics. For the same reason you should stay away from BufStream::into_inner.


lib.rs:

A crate for separately buffered streams.

This crate provides a BufStream type which provides buffering of both the reading and writing halves of a Read + Write type. Each half is completely independently buffered of the other, which may not always be desired. For example BufStream<File> may have surprising semantics.

Usage

[dependencies]
bufstream = "0.1"
use std::io::prelude::*;
use std::net::TcpStream;
use bufstream::BufStream;


let stream = TcpStream::connect("localhost:4000").unwrap();
let mut buf = BufStream::new(stream);
buf.read(&mut [0; 1024]).unwrap();
buf.write(&[0; 1024]).unwrap();

Async I/O

This crate optionally can support async I/O streams with the Tokio stack via the tokio feature of this crate:

bufstream = { version = "0.2", features = ["tokio"] }

All methods are internally capable of working with streams that may return ErrorKind::WouldBlock when they're not ready to perform the particular operation.

Note that care needs to be taken when using these objects, however. The Tokio runtime, in particular, requires that data is fully flushed before dropping streams. For compatibility with blocking streams all streams are flushed/written when they are dropped, and this is not always a suitable time to perform I/O. If I/O streams are flushed before drop, however, then these operations will be a noop.

Dependencies

~105KB