diff options
| author | bors <bors@rust-lang.org> | 2020-02-04 20:30:53 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-02-04 20:30:53 +0000 |
| commit | c9290dceee2cb6b882b26ec6e294560e51ef0853 (patch) | |
| tree | 4a562c7b3baab76e74d7e2f0b4cd02b2264474ee /src/libstd | |
| parent | 5b0caef54a062b5e283cf15d1fad7027f631f29d (diff) | |
| parent | aebd0d733940d62566c66a923c7b9f7078209e98 (diff) | |
| download | rust-c9290dceee2cb6b882b26ec6e294560e51ef0853.tar.gz rust-c9290dceee2cb6b882b26ec6e294560e51ef0853.zip | |
Auto merge of #68558 - HeroicKatora:buf-writer-capacity, r=alexcrichton
Add a method to query the capacity of a BufWriter and BufReader Besides the obvious of retrieving the parameter used to construct the writer, this method allows consumers to control the number of `flush` calls during write operations. For `BufReader` it gives an upper bound on the returned buffer in `fill_buf` which might influence the allocation behaviour of a consumer.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/io/buffered.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index 9e6849ba5bc..6739d4498a6 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -179,6 +179,30 @@ impl<R> BufReader<R> { &self.buf[self.pos..self.cap] } + /// Returns the number of bytes the internal buffer can hold at once. + /// + /// # Examples + /// + /// ```no_run + /// #![feature(buffered_io_capacity)] + /// use std::io::{BufReader, BufRead}; + /// use std::fs::File; + /// + /// fn main() -> std::io::Result<()> { + /// let f = File::open("log.txt")?; + /// let mut reader = BufReader::new(f); + /// + /// let capacity = reader.capacity(); + /// let buffer = reader.fill_buf()?; + /// assert!(buffer.len() <= capacity); + /// Ok(()) + /// } + /// ``` + #[unstable(feature = "buffered_io_capacity", issue = "68558")] + pub fn capacity(&self) -> usize { + self.buf.len() + } + /// Unwraps this `BufReader<R>`, returning the underlying reader. /// /// Note that any leftover data in the internal buffer is lost. Therefore, @@ -576,6 +600,27 @@ impl<W: Write> BufWriter<W> { &self.buf } + /// Returns the number of bytes the internal buffer can hold without flushing. + /// + /// # Examples + /// + /// ```no_run + /// #![feature(buffered_io_capacity)] + /// use std::io::BufWriter; + /// use std::net::TcpStream; + /// + /// let buf_writer = BufWriter::new(TcpStream::connect("127.0.0.1:34254").unwrap()); + /// + /// // Check the capacity of the inner buffer + /// let capacity = buf_writer.capacity(); + /// // Calculate how many bytes can be written without flushing + /// let without_flush = capacity - buf_writer.buffer().len(); + /// ``` + #[unstable(feature = "buffered_io_capacity", issue = "68558")] + pub fn capacity(&self) -> usize { + self.buf.capacity() + } + /// Unwraps this `BufWriter<W>`, returning the underlying writer. /// /// The buffer is written out before returning the writer. |
