linereader is a rust crate that provides a non-blocking buffered line reader for [Read] objects.
The [LineReaderNonBlock
] object is akin to a [BufReader] object
that returns only complete lines, but without blocking. It also
implements the [BufRead] trait, but deviates from it by not
blocking in [read_line
], and allowing it to be called multiple
times.
This crate works very well with the [polling] crate, which allows us to block waiting on data to be available in any one of multiple streams (files, sockets, etc.). It's an alternative to using threads and/or [tokio].
See [LineReaderNonBlock
] for details.
The simplest way to explain how to use LineReaderNonBlock
is
with a busy-loop example:
```rust use lineriver::LineReaderNonBlock;
let mut linereader = LineReaderNonBlock::new(reader)?; while !linereader.eof() { linereader.readavailable()?; let lines = linereader.linesget(); for line in lines { print!("{}", line); } } ```