Skip to content

Commit 720ed7f

Browse files
author
Brian Obot
committed
Add notes on Reader methods
1 parent a36fd46 commit 720ed7f

4 files changed

Lines changed: 75 additions & 2 deletions

File tree

file.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
lorem40

hello.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
hello world
1+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam commodo sit amet elit ut consequat. Fusce posuere mollis libero vitae feugiat. Vestibulum nec nisl feugiat, fringilla odio sit amet, luctus mauris. Ut scelerisque dui a purus molestie, at sodales metus posuere. Sed odio velit, malesuada ac turpis vitae, bibendum facilisis lorem. Cras in tellus viverra, suscipit ante vel, eleifend enim. Sed mauris sem, facilisis at tristique eu, commodo a urna. Cras mauris justo, suscipit sed sapien sed, tristique aliquam nunc.
2+
3+
Praesent augue neque, volutpat in accumsan ac, semper ac leo. Suspendisse fringilla condimentum aliquam. Etiam luctus bibendum ipsum, eu molestie leo euismod id. Pellentesque eu risus quis erat aliquam fermentum. Nulla ac varius nunc, nec venenatis arcu. Curabitur at sagittis quam. Praesent ut tristique nunc. Integer erat sapien, tempus sed bibendum et, commodo eget velit. In vitae libero lacinia, lobortis neque a, fringilla arcu. Sed tincidunt vestibulum viverra.
4+
5+
Sed velit libero, pharetra sit amet ex id, viverra egestas orci. Suspendisse orci dui, cursus vitae dui id, imperdiet faucibus nunc. Duis efficitur sed dui non dapibus. Duis non erat porttitor, pretium magna non, accumsan lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris dolor ipsum, fringilla ut congue ac, blandit ut neque. Nullam suscipit est ut libero pulvinar lacinia. Morbi id ultricies libero, ut rhoncus purus. Aenean vehicula porttitor mattis. Curabitur volutpat suscipit augue sed euismod. Maecenas luctus tellus sit amet quam semper vestibulum. Vivamus feugiat, orci in fermentum lobortis, enim velit fringilla dui, ultrices semper magna mauris id dui. Aliquam consectetur ut lectus ac suscipit. Nullam gravida nibh id vestibulum feugiat.
6+
7+
Duis interdum nibh nulla, nec commodo libero finibus quis. Mauris a eleifend dolor, quis ultrices orci. Nunc facilisis, massa nec malesuada feugiat, neque velit aliquam dolor, rhoncus dignissim mi eros pharetra libero. Donec quis dui vehicula leo pulvinar interdum. Integer pellentesque eu dolor eget pretium. Nunc tincidunt scelerisque augue, a elementum eros pellentesque in. Ut vitae est felis. Curabitur scelerisque semper lectus nec aliquet. Phasellus sed odio eget turpis commodo tempor ac eget dui. Ut a tortor libero. Maecenas tortor dui, ultricies sit amet arcu nec, iaculis suscipit risus.
8+
9+
Nulla elementum quis felis a rhoncus. Nulla lorem mauris, tempor at orci a, volutpat consectetur libero. In hac habitasse platea dictumst. Pellentesque finibus leo in mauris faucibus, eget convallis nulla euismod. Aenean sed rutrum sapien. Integer ultricies dapibus mollis. Nunc nec magna augue. Ut eu suscipit turpis, id tristique ligula. Mauris ut diam at neque tincidunt imperdiet nec et justo. Etiam eget elit ac augue dignissim accumsan. Duis facilisis vestibulum dolor, ut venenatis enim tincidunt vitae. Pellentesque a lacus eget justo porttitor mollis. Donec et tellus blandit, tincidunt nulla ac, consequat lorem. Curabitur placerat dictum elit at pretium.

sample_file.txt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
lorem
1+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam commodo sit amet elit ut consequat. Fusce posuere mollis libero vitae feugiat. Vestibulum nec nisl feugiat, fringilla odio sit amet, luctus mauris. Ut scelerisque dui a purus molestie, at sodales metus posuere. Sed odio velit, malesuada ac turpis vitae, bibendum facilisis lorem. Cras in tellus viverra, suscipit ante vel, eleifend enim. Sed mauris sem, facilisis at tristique eu, commodo a urna. Cras mauris justo, suscipit sed sapien sed, tristique aliquam nunc.
2+
3+
Praesent augue neque, volutpat in accumsan ac, semper ac leo. Suspendisse fringilla condimentum aliquam. Etiam luctus bibendum ipsum, eu molestie leo euismod id. Pellentesque eu risus quis erat aliquam fermentum. Nulla ac varius nunc, nec venenatis arcu. Curabitur at sagittis quam. Praesent ut tristique nunc. Integer erat sapien, tempus sed bibendum et, commodo eget velit. In vitae libero lacinia, lobortis neque a, fringilla arcu. Sed tincidunt vestibulum viverra.
4+
5+
Sed velit libero, pharetra sit amet ex id, viverra egestas orci. Suspendisse orci dui, cursus vitae dui id, imperdiet faucibus nunc. Duis efficitur sed dui non dapibus. Duis non erat porttitor, pretium magna non, accumsan lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Mauris dolor ipsum, fringilla ut congue ac, blandit ut neque. Nullam suscipit est ut libero pulvinar lacinia. Morbi id ultricies libero, ut rhoncus purus. Aenean vehicula porttitor mattis. Curabitur volutpat suscipit augue sed euismod. Maecenas luctus tellus sit amet quam semper vestibulum. Vivamus feugiat, orci in fermentum lobortis, enim velit fringilla dui, ultrices semper magna mauris id dui. Aliquam consectetur ut lectus ac suscipit. Nullam gravida nibh id vestibulum feugiat.
6+
7+
Duis interdum nibh nulla, nec commodo libero finibus quis. Mauris a eleifend dolor, quis ultrices orci. Nunc facilisis, massa nec malesuada feugiat, neque velit aliquam dolor, rhoncus dignissim mi eros pharetra libero. Donec quis dui vehicula leo pulvinar interdum. Integer pellentesque eu dolor eget pretium. Nunc tincidunt scelerisque augue, a elementum eros pellentesque in. Ut vitae est felis. Curabitur scelerisque semper lectus nec aliquet. Phasellus sed odio eget turpis commodo tempor ac eget dui. Ut a tortor libero. Maecenas tortor dui, ultricies sit amet arcu nec, iaculis suscipit risus.
8+
9+
Nulla elementum quis felis a rhoncus. Nulla lorem mauris, tempor at orci a, volutpat consectetur libero. In hac habitasse platea dictumst. Pellentesque finibus leo in mauris faucibus, eget convallis nulla euismod. Aenean sed rutrum sapien. Integer ultricies dapibus mollis. Nunc nec magna augue. Ut eu suscipit turpis, id tristique ligula. Mauris ut diam at neque tincidunt imperdiet nec et justo. Etiam eget elit ac augue dignissim accumsan. Duis facilisis vestibulum dolor, ut venenatis enim tincidunt vitae. Pellentesque a lacus eget justo porttitor mollis. Donec et tellus blandit, tincidunt nulla ac, consequat lorem. Curabitur placerat dictum elit at pretium.

src/bin/46_input_and_output.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use std::io::{self, Read, Write};
2+
3+
fn main() {
4+
// types that implement the Read traits are Readers and have method for byte oriented input
5+
// types that implement the BufRead traits are buffered readers and have methods for reading lines of texts and so forth
6+
// types that implement the Write traits are Writers and have methods for byte oriented output
7+
//
8+
// Readers are values that your program can read bytes values from
9+
// std::fs::File
10+
// std::net::TcpStreams
11+
// std::io::StdIn
12+
//
13+
// Writers are values that your progam can write byte values to
14+
// std::fs::File
15+
// std::net::TcpStreams
16+
// std::io::StdOut
17+
// Vec<u8>
18+
//
19+
// Personal Notes:
20+
// it is possible to write generic code that works for across the input and output channel
21+
// std::io::Read::read(&mut self, buf)
22+
fn generic_copy<R: Read, W: Write>(reader: &mut R, writer: &mut W) -> io::Result<u64> {
23+
let mut buf = [0; 8 * 1024];
24+
let mut written = 0;
25+
26+
loop {
27+
let len = match reader.read(&mut buf) {
28+
Ok(0) => return Ok(written),
29+
Ok(len) => len,
30+
Err(e) => {
31+
println!("✅ Error: {e:?}");
32+
return Err(e);
33+
}
34+
};
35+
36+
writer.write_all(&buf[..len])?;
37+
written += len as u64;
38+
}
39+
}
40+
41+
let mut input_file = std::fs::File::open("hello.txt").unwrap();
42+
let mut output_file = std::fs::File::create("sample_file.txt").unwrap();
43+
44+
println!("Input File: {input_file:?}");
45+
println!("Output File: {output_file:?}");
46+
47+
let copied = generic_copy(&mut input_file, &mut output_file).unwrap();
48+
println!("Copied: {copied}");
49+
50+
// Readers have several methods for reading data and they all take a mutabel reference to the reader itself
51+
// .read(&mut buff) reads some data from the data source and stores them in the buffer, the read method reads up until the len of buff
52+
// .read_to_end(&mut Vec<u8>): this reads all the data in the data source into the Vector
53+
// .read_to_string(&mut String): same as above but appends the data to the given String
54+
// ,read_exact(&mut buf): Reads exactly enough data to fill the buffer, if the reader runs out of data before the buffer length, an Error is returned
55+
//
56+
}

0 commit comments

Comments
 (0)