@@ -525,6 +525,25 @@ impl<W: Write> BufWriter<W> {
525
525
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
526
526
pub fn get_mut ( & mut self ) -> & mut W { self . inner . as_mut ( ) . unwrap ( ) }
527
527
528
+ /// Returns a reference to the internally buffered data.
529
+ ///
530
+ /// # Examples
531
+ ///
532
+ /// ```no_run
533
+ /// # #![feature(bufreader_buffer)]
534
+ /// use std::io::BufWriter;
535
+ /// use std::net::TcpStream;
536
+ ///
537
+ /// let buf_writer = BufWriter::new(TcpStream::connect("127.0.0.1:34254").unwrap());
538
+ ///
539
+ /// // See how many bytes are currently buffered
540
+ /// let bytes_buffered = buf_writer.buffer().len();
541
+ /// ```
542
+ #[ unstable( feature = "bufreader_buffer" , issue = "45323" ) ]
543
+ pub fn buffer ( & self ) -> & [ u8 ] {
544
+ & self . buf
545
+ }
546
+
528
547
/// Unwraps this `BufWriter`, returning the underlying writer.
529
548
///
530
549
/// The buffer is written out before returning the writer.
@@ -965,31 +984,31 @@ mod tests {
965
984
let mut buf = [ 0 , 0 , 0 ] ;
966
985
let nread = reader. read ( & mut buf) ;
967
986
assert_eq ! ( nread. unwrap( ) , 3 ) ;
968
- let b : & [ _ ] = & [ 5 , 6 , 7 ] ;
969
- assert_eq ! ( buf , b ) ;
987
+ assert_eq ! ( buf , [ 5 , 6 , 7 ] ) ;
988
+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
970
989
971
990
let mut buf = [ 0 , 0 ] ;
972
991
let nread = reader. read ( & mut buf) ;
973
992
assert_eq ! ( nread. unwrap( ) , 2 ) ;
974
- let b : & [ _ ] = & [ 0 , 1 ] ;
975
- assert_eq ! ( buf , b ) ;
993
+ assert_eq ! ( buf , [ 0 , 1 ] ) ;
994
+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
976
995
977
996
let mut buf = [ 0 ] ;
978
997
let nread = reader. read ( & mut buf) ;
979
998
assert_eq ! ( nread. unwrap( ) , 1 ) ;
980
- let b : & [ _ ] = & [ 2 ] ;
981
- assert_eq ! ( buf , b ) ;
999
+ assert_eq ! ( buf , [ 2 ] ) ;
1000
+ assert_eq ! ( reader . buffer ( ) , [ 3 ] ) ;
982
1001
983
1002
let mut buf = [ 0 , 0 , 0 ] ;
984
1003
let nread = reader. read ( & mut buf) ;
985
1004
assert_eq ! ( nread. unwrap( ) , 1 ) ;
986
- let b : & [ _ ] = & [ 3 , 0 , 0 ] ;
987
- assert_eq ! ( buf , b ) ;
1005
+ assert_eq ! ( buf , [ 3 , 0 , 0 ] ) ;
1006
+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
988
1007
989
1008
let nread = reader. read ( & mut buf) ;
990
1009
assert_eq ! ( nread. unwrap( ) , 1 ) ;
991
- let b : & [ _ ] = & [ 4 , 0 , 0 ] ;
992
- assert_eq ! ( buf , b ) ;
1010
+ assert_eq ! ( buf , [ 4 , 0 , 0 ] ) ;
1011
+ assert_eq ! ( reader . buffer ( ) , [ ] ) ;
993
1012
994
1013
assert_eq ! ( reader. read( & mut buf) . unwrap( ) , 0 ) ;
995
1014
}
@@ -1078,31 +1097,40 @@ mod tests {
1078
1097
let mut writer = BufWriter :: with_capacity ( 2 , inner) ;
1079
1098
1080
1099
writer. write ( & [ 0 , 1 ] ) . unwrap ( ) ;
1100
+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
1081
1101
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
1082
1102
1083
1103
writer. write ( & [ 2 ] ) . unwrap ( ) ;
1104
+ assert_eq ! ( writer. buffer( ) , [ 2 ] ) ;
1084
1105
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
1085
1106
1086
1107
writer. write ( & [ 3 ] ) . unwrap ( ) ;
1108
+ assert_eq ! ( writer. buffer( ) , [ 2 , 3 ] ) ;
1087
1109
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 ] ) ;
1088
1110
1089
1111
writer. flush ( ) . unwrap ( ) ;
1112
+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
1090
1113
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 ] ) ;
1091
1114
1092
1115
writer. write ( & [ 4 ] ) . unwrap ( ) ;
1093
1116
writer. write ( & [ 5 ] ) . unwrap ( ) ;
1117
+ assert_eq ! ( writer. buffer( ) , [ 4 , 5 ] ) ;
1094
1118
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 ] ) ;
1095
1119
1096
1120
writer. write ( & [ 6 ] ) . unwrap ( ) ;
1121
+ assert_eq ! ( writer. buffer( ) , [ 6 ] ) ;
1097
1122
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ;
1098
1123
1099
1124
writer. write ( & [ 7 , 8 ] ) . unwrap ( ) ;
1125
+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
1100
1126
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) ;
1101
1127
1102
1128
writer. write ( & [ 9 , 10 , 11 ] ) . unwrap ( ) ;
1129
+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
1103
1130
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ) ;
1104
1131
1105
1132
writer. flush ( ) . unwrap ( ) ;
1133
+ assert_eq ! ( writer. buffer( ) , [ ] ) ;
1106
1134
assert_eq ! ( * writer. get_ref( ) , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ] ) ;
1107
1135
}
1108
1136
0 commit comments