gpt4 book ai didi

rust - 如何在 Rust 中创建可用作 Reader、Writer 或 Seek 的内存对象?

转载 作者:行者123 更新时间:2023-11-29 08:21:16 24 4
gpt4 key购买 nike

我需要一个完全在内存中的对象,我可以将其提供给 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>>就像普通文件一样,因为Read , WriteSeek为该类型实现!

小例子(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/41686952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com