@@ -917,6 +917,19 @@ pub trait Read {
917
917
/// # }
918
918
/// ```
919
919
///
920
+ /// # Usage Notes
921
+ ///
922
+ /// `read_to_end` attempts to read a source until EOF, but many sources are continuous streams
923
+ /// that do not send EOF. In these cases, `read_to_end` will block indefinitely. Standard input
924
+ /// is one such stream which may be finite if piped, but is typically continuous. For example,
925
+ /// `cat file | my-rust-program` will correctly terminate with an `EOF` upon closure of cat.
926
+ /// Reading user input or running programs that remain open indefinitely will never terminate
927
+ /// the stream with `EOF` (e.g. `yes | my-rust-program`).
928
+ ///
929
+ /// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
930
+ ///
931
+ ///[`read`]: Read::read
932
+ ///
920
933
/// [`Vec::try_reserve`]: crate::vec::Vec::try_reserve
921
934
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
922
935
fn read_to_end ( & mut self , buf : & mut Vec < u8 > ) -> Result < usize > {
@@ -960,6 +973,19 @@ pub trait Read {
960
973
/// (See also the [`std::fs::read_to_string`] convenience function for
961
974
/// reading from a file.)
962
975
///
976
+ /// # Usage Notes
977
+ ///
978
+ /// `read_to_string` attempts to read a source until EOF, but many sources are continuous streams
979
+ /// that do not send EOF. In these cases, `read_to_string` will block indefinitely. Standard input
980
+ /// is one such stream which may be finite if piped, but is typically continuous. For example,
981
+ /// `cat file | my-rust-program` will correctly terminate with an `EOF` upon closure of cat.
982
+ /// Reading user input or running programs that remain open indefinitely will never terminate
983
+ /// the stream with `EOF` (e.g. `yes | my-rust-program`).
984
+ ///
985
+ /// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
986
+ ///
987
+ ///[`read`]: Read::read
988
+ ///
963
989
/// [`std::fs::read_to_string`]: crate::fs::read_to_string
964
990
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
965
991
fn read_to_string ( & mut self , buf : & mut String ) -> Result < usize > {
@@ -1262,6 +1288,20 @@ pub trait Read {
1262
1288
/// Ok(())
1263
1289
/// }
1264
1290
/// ```
1291
+ ///
1292
+ /// # Usage Notes
1293
+ ///
1294
+ /// `read_to_string` attempts to read a source until EOF, but many sources are continuous streams
1295
+ /// that do not send EOF. In these cases, `read_to_string` will block indefinitely. Standard input
1296
+ /// is one such stream which may be finite if piped, but is typically continuous. For example,
1297
+ /// `cat file | my-rust-program` will correctly terminate with an `EOF` upon closure of cat.
1298
+ /// Reading user input or running programs that remain open indefinitely will never terminate
1299
+ /// the stream with `EOF` (e.g. `yes | my-rust-program`).
1300
+ ///
1301
+ /// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
1302
+ ///
1303
+ ///[`read`]: Read::read
1304
+ ///
1265
1305
#[ stable( feature = "io_read_to_string" , since = "1.65.0" ) ]
1266
1306
pub fn read_to_string < R : Read > ( mut reader : R ) -> Result < String > {
1267
1307
let mut buf = String :: new ( ) ;
0 commit comments