Expand description
Traits, helpers, and type definitions for core I/O functionality.
The std::io
module contains a number of common things you’ll need
when doing input and output. The most core part of this module is
the Read
and Write
traits, which provide the
most general interface for reading and writing input and output.
§Read and Write
Because they are traits, Read
and Write
are implemented by a number
of other types, and you can implement them for your types too. As such,
you’ll see a few different types of I/O throughout the documentation in
this module: File
s, TcpStream
s, and sometimes even Vec<T>
s. For
example, Read
adds a read
method, which we can use on
File
s:
use std::io;
use std::io::prelude::*;
use std::fs::File;
fn main() -> io::Result<()> {
let mut f = File::open("foo.txt")?;
let mut buffer = [0; 10];
// read up to 10 bytes
let n = f.read(&mut buffer)?;
println!("The bytes: {:?}", &buffer[..n]);
Ok(())
}
Read
and Write
are so important, implementors of the two traits have a
nickname: readers and writers. So you’ll sometimes see ‘a reader’ instead
of ‘a type that implements the Read
trait’. Much easier!
§Seek and BufRead
Beyond that, there are two important traits that are provided: Seek
and BufRead
. Both of these build on top of a reader to control
how the reading happens. Seek
lets you control where the next byte is
coming from: