@@ -917,12 +917,16 @@ pub trait Read {
917
917
/// # }
918
918
/// ```
919
919
///
920
- /// # Notes
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
+ /// `yes "Data" | pv | <my_rust_program` or `tail -f <file> | <my_rust_program>` may not close
927
+ /// the stream or insert an `EOF` termination character.
921
928
///
922
- /// Be careful using this trait method with streams that are expected to be continuous. For example, using
923
- /// `read_to_end` with streams like `stdin` will simply lock the application into waiting on the
924
- /// transmission of data to conclude. It is recommended you use this method if you know the stream will be closed
925
- /// at the other end. The problem is that EOF or End of File is never reached for streams that never close or are finite.
929
+ /// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
926
930
///
927
931
/// [`Vec::try_reserve`]: crate::vec::Vec::try_reserve
928
932
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -964,16 +968,20 @@ pub trait Read {
964
968
/// }
965
969
/// ```
966
970
///
967
- /// # Notes
968
- ///
969
- /// Be careful using this trait method with streams that are expected to be continuous. For example, using
970
- /// `read_to_string` with streams like `stdin` will simply lock the application into waiting on the
971
- /// transmission of data to conclude. It is recommended you use this method if you know the stream will be closed
972
- /// at the other end. The problem is that EOF or End of File is never reached for streams that never close or are finite.
973
- ///
974
971
/// (See also the [`std::fs::read_to_string`] convenience function for
975
972
/// reading from a file.)
976
973
///
974
+ /// # Usage Notes
975
+ ///
976
+ /// `read_to_string` attempts to read a source until EOF, but many sources are continuous streams
977
+ /// that do not send EOF. In these cases, `read_to_string` will block indefinitely. Standard input
978
+ /// is one such stream which may be finite if piped, but is typically continuous. For example,
979
+ /// `cat <file> | <my_rust_program>` will correctly terminate with an `EOF` upon closure of cat.
980
+ /// `yes "Data" | pv | <my_rust_program` or `tail -f <file> | <my_rust_program>` may not close
981
+ /// the stream or insert an `EOF` termination character.
982
+ ///
983
+ /// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
984
+ ///
977
985
/// [`std::fs::read_to_string`]: crate::fs::read_to_string
978
986
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
979
987
fn read_to_string ( & mut self , buf : & mut String ) -> Result < usize > {
@@ -1276,6 +1284,17 @@ pub trait Read {
1276
1284
/// Ok(())
1277
1285
/// }
1278
1286
/// ```
1287
+ ///
1288
+ /// # Usage Notes
1289
+ ///
1290
+ /// `read_to_string` attempts to read a source until EOF, but many sources are continuous streams
1291
+ /// that do not send EOF. In these cases, `read_to_string` will block indefinitely. Standard input
1292
+ /// is one such stream which may be finite if piped, but is typically continuous. For example,
1293
+ /// `cat <file> | <my_rust_program>` will correctly terminate with an `EOF` upon closure of cat.
1294
+ /// `yes "Data" | pv | <my_rust_program` or `tail -f <file> | <my_rust_program>` may not close
1295
+ /// the stream or insert an `EOF` termination character.
1296
+ ///
1297
+ /// Using `.lines()` with a [`BufReader`] or using [`read`] can provide a better solution
1279
1298
#[ stable( feature = "io_read_to_string" , since = "1.65.0" ) ]
1280
1299
pub fn read_to_string < R : Read > ( mut reader : R ) -> Result < String > {
1281
1300
let mut buf = String :: new ( ) ;
0 commit comments