diff options
| author | León Orell Valerian Liehr <me@fmease.dev> | 2024-01-03 16:08:25 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-03 16:08:25 +0100 |
| commit | 4e265d9fe05c02bcc466782eccf1b83c092e0206 (patch) | |
| tree | ac99d23584b278e1327889877334b11e9a2183af | |
| parent | 907922b4728132c2e5b052f7e13d35d5b5b02ae3 (diff) | |
| parent | 5cbe41ae9e1058eb143adecccc2e12c622b67342 (diff) | |
| download | rust-4e265d9fe05c02bcc466782eccf1b83c092e0206.tar.gz rust-4e265d9fe05c02bcc466782eccf1b83c092e0206.zip | |
Rollup merge of #119319 - chfogelman:buffered-file-doc, r=the8472
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.
| -rw-r--r-- | library/std/src/fs.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/library/std/src/fs.rs b/library/std/src/fs.rs index 38050cf684f..c4a92927937 100644 --- a/library/std/src/fs.rs +++ b/library/std/src/fs.rs @@ -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()`]): @@ -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; @@ -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 { |
