5 releases

Uses old Rust 2015

0.1.4 Sep 27, 2018
0.1.3 Apr 26, 2017
0.1.2 Apr 29, 2016
0.1.1 May 13, 2015
0.1.0 May 5, 2015

#1759 in Algorithms

Download history 18716/week @ 2023-11-03 19927/week @ 2023-11-10 19516/week @ 2023-11-17 19844/week @ 2023-11-24 21104/week @ 2023-12-01 26119/week @ 2023-12-08 21813/week @ 2023-12-15 13529/week @ 2023-12-22 15716/week @ 2023-12-29 20726/week @ 2024-01-05 16321/week @ 2024-01-12 17740/week @ 2024-01-19 16733/week @ 2024-01-26 15597/week @ 2024-02-02 15217/week @ 2024-02-09 13382/week @ 2024-02-16

63,625 downloads per month
Used in fewer than 59 crates


138 lines


Buffered I/O streams for reading/writing

Build Status



bufstream = "0.1"


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.


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.


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.