I need a completely in-memory object that I can give to BufReader
and BufWriter
. Something like Python's StringIO
. I want to write to and read from such an object using methods ordinarily used with File
s.
有没有办法使用标准库来做到这一点?
最佳答案
In fact there is a way. Meet Cursor<T>
!
在文档中,您可以看到以下含义:
impl<T> Seek for Cursor<T> where T: AsRef<[u8]>
impl<T> Read for Cursor<T> where T: AsRef<[u8]>
impl Write for Cursor<Vec<u8>>
impl<T> AsRef<[T]> for Vec<T>
From this you can see that you can use the type Cursor<Vec<u8>>
just as an ordinary file, because Read
, Write
and Seek
are implemented for that type!
小例子(游乐场):
use std::io::{Cursor, Read, Seek, SeekFrom, Write};
// Create fake "file"
let mut c = Cursor::new(Vec::new());
// Write into the "file" and seek to the beginning
c.write_all(&[1, 2, 3, 4, 5]).unwrap();
c.seek(SeekFrom::Start(0)).unwrap();
// Read the "file's" contents into a vector
let mut out = Vec::new();
c.read_to_end(&mut out).unwrap();
println!("{:?}", out);
有关更有用的示例,请查看上面链接的文档。