new_buffer_string

Function new_buffer_string 

Source
pub fn new_buffer_string(s: &str) -> Buffer 
Expand description

new_buffer_string creates and initializes a new Buffer using string s as its initial contents. It is intended to prepare a buffer to read an existing string.

Buffer::new() also can be used to initialize a Buffer.

Examples found in repository?
examples/flate-dict.rs (line 40)
16fn example_dictionary() {
17    // The dictionary is a string of bytes. When compressing some input data,
18    // the compressor will attempt to substitute substrings with matches found
19    // in the dictionary. As such, the dictionary should only contain substrings
20    // that are expected to be found in the actual data stream.
21    let dict = b"<?xml version=\"1.0\"?><book><data><meta name=\"\" content=\"";
22
23    // The data to compress should (but is not required to) contain frequent
24    // substrings that match those in the dictionary.
25    let data = r#"<?xml version="1.0"?>
26<book>
27    <meta name="title" content="The Go Programming Language"/>
28    <meta name="authors" content="Alan Donovan and Brian Kernighan"/>
29    <meta name="published" content="2015-10-26"/>
30    <meta name="isbn" content="978-0134190440"/>
31    <data>...</data>
32</book>
33"#;
34
35    let mut b = bytes::Buffer::new();
36
37    // Compress the data using the specially crafted dictionary.
38    {
39        let mut zw = flate::Writer::new_dict(&mut b, flate::DEFAULT_COMPRESSION, dict).unwrap();
40        let mut data_reader = bytes::new_buffer_string(data);
41        std::io::copy(&mut data_reader, &mut zw).unwrap();
42        zw.close().unwrap();
43    }
44
45    // The decompressor must use the same dictionary as the compressor.
46    // Otherwise, the input may appear as corrupted.
47    println!("Decompressed output using the dictionary:");
48    {
49        let mut data_reader = b.bytes();
50        let mut zr = flate::Reader::new_dict(&mut data_reader, dict);
51        let mut decompressed = bytes::Buffer::new();
52        std::io::copy(&mut zr, &mut decompressed).unwrap();
53        zr.close().unwrap();
54        println!("{}", String::from_utf8_lossy(decompressed.bytes()));
55        println!();
56    }
57
58    // Substitute all of the bytes in the dictionary with a '#' to visually
59    // demonstrate the approximate effectiveness of using a preset dictionary.
60    println!("Substrings matched by the dictionary are marked with #:");
61    {
62        let hash_dict = vec![b'#'; dict.len()];
63        let mut zr = flate::Reader::new_dict(&mut b, &hash_dict);
64        let mut decompressed = bytes::Buffer::new();
65        std::io::copy(&mut zr, &mut decompressed).unwrap();
66        zr.close().unwrap();
67        println!("{}", String::from_utf8_lossy(decompressed.bytes()));
68    }
69
70    // Output:
71    // Decompressed output using the dictionary:
72    // <?xml version="1.0"?>
73    // <book>
74    // 	<meta name="title" content="The Go Programming Language"/>
75    // 	<meta name="authors" content="Alan Donovan and Brian Kernighan"/>
76    // 	<meta name="published" content="2015-10-26"/>
77    // 	<meta name="isbn" content="978-0134190440"/>
78    // 	<data>...</data>
79    // </book>
80    //
81    // Substrings matched by the dictionary are marked with #:
82    // #####################
83    // ######
84    // 	############title###########The Go Programming Language"/#
85    // 	############authors###########Alan Donovan and Brian Kernighan"/#
86    // 	############published###########2015-10-26"/#
87    // 	############isbn###########978-0134190440"/#
88    // 	######...</#####
89    // </#####
90}