Skip to content

Commit

Permalink
Rollup merge of rust-lang#119319 - chfogelman:buffered-file-doc, r=th…
Browse files Browse the repository at this point in the history
…e8472

Document that File does not buffer reads/writes

...and refer to `BufReader`/`BufWriter`.

This is a common source of efficiency issues in Rust programs written naively. Including this information with the `File` docs, and adding a link to the wrapper types, will help discoverability.
  • Loading branch information
fmease authored Jan 3, 2024
2 parents e1f8d68 + 5cbe41a commit 383daa7
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions library/std/src/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ use crate::time::SystemTime;
/// on closing are ignored by the implementation of `Drop`. Use the method
/// [`sync_all`] if these errors must be manually handled.
///
/// `File` does not buffer reads and writes. For efficiency, consider wrapping the
/// file in a [`BufReader`] or [`BufWriter`] when performing many small [`read`]
/// or [`write`] calls, unless unbuffered reads and writes are required.
///
/// # Examples
///
/// Creates a new file and write bytes to it (you can also use [`write()`]):
Expand Down Expand Up @@ -61,8 +65,7 @@ use crate::time::SystemTime;
/// }
/// ```
///
/// It can be more efficient to read the contents of a file with a buffered
/// [`Read`]er. This can be accomplished with [`BufReader<R>`]:
/// Using a buffered [`Read`]er:
///
/// ```no_run
/// use std::fs::File;
Expand Down Expand Up @@ -93,8 +96,11 @@ use crate::time::SystemTime;
/// perform synchronous I/O operations. Therefore the underlying file must not
/// have been opened for asynchronous I/O (e.g. by using `FILE_FLAG_OVERLAPPED`).
///
/// [`BufReader<R>`]: io::BufReader
/// [`BufReader`]: io::BufReader
/// [`BufWriter`]: io::BufReader
/// [`sync_all`]: File::sync_all
/// [`write`]: File::write
/// [`read`]: File::read
#[stable(feature = "rust1", since = "1.0.0")]
#[cfg_attr(not(test), rustc_diagnostic_item = "File")]
pub struct File {
Expand Down

0 comments on commit 383daa7

Please sign in to comment.