rust - 如何创建一个可以用作Rust中的Reader,Writer或Seek的内存对象?

标签 rust in-memory

我需要一个可以完全提供给BufReaderBufWriter的内存对象。类似于Python的StringIO。我想使用通常与File一起使用的方法写入和读取此类对象。

有没有办法使用标准库来做到这一点?

最佳答案

实际上,有一种方法: Cursor<T> !
(也请阅读Shepmaster's answer,了解为什么它经常更容易)

在文档中,您可以看到以下含义:

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>

从中可以看到可以将Cursor<Vec<u8>>类型用作普通文件,因为ReadWriteSeek是针对该类型实现的!

小例子(Playground):
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);

有关更有用的示例,请查看上面链接的文档。

关于rust - 如何创建一个可以用作Rust中的Reader,Writer或Seek的内存对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64772323/

相关文章:

为裸机 ARM 正确编译 Rust 代码作为静态库和 x86_64 的二进制文件?

rust - 为什么结构中的切片需要生命周期,而不是向量?

python - PDF 到 IMAGE 到 PDF 全部在内存中完成

r - 如何直接将R中的write.csv执行为tar.gz格式?

rust - 在闭包中处理可变计数器变量

readline - rust 0.10 有 rl 包吗?

caching - 在ASP.Net Core上具有自动重新生成的内存中缓存

mysql - MySQL是内存数据库吗?

hadoop - 没有 hadoop 但有其他 MR 实现的 mahout

rust - 暗示AsyncRead为补品::流