有没有一种方法可以在不重新分配的情况下使用std::io::write写入内存缓冲区?

有没有一种方法可以在不重新分配的情况下使用std::io::write写入内存缓冲区?,io,rust,Io,Rust,有没有一种方法可以使用std::io::Write将流直接写入内存,而不必在开始时预先分配final,也不必在写入时重新分配整个数组 虽然Vec实现了Write,但这需要连续的内存,我认为可能会像常规调整向量大小一样重新分配 Rust的stdlib是否支持类似的功能,或者是否需要实现它 我想写入内存,它有可能进入多个GiB。可能内存是碎片化的,也可能是我想要的大小的连续区域不可用。相反,分配许多块(可能是固定的2次方大小)并根据需要分配更多的块是非常有效的 一旦完成,您可以读回数据,压缩内存中

有没有一种方法可以使用
std::io::Write
将流直接写入内存,而不必在开始时预先分配final,也不必在写入时重新分配整个数组

虽然
Vec
实现了
Write
,但这需要连续的内存,我认为可能会像常规调整向量大小一样重新分配

Rust的
stdlib
是否支持类似的功能,或者是否需要实现它


我想写入内存,它有可能进入多个GiB。可能内存是碎片化的,也可能是我想要的大小的连续区域不可用。相反,分配许多块(可能是固定的2次方大小)并根据需要分配更多的块是非常有效的


一旦完成,您可以读回数据,压缩内存中的数据块,将一些数据块缓存到磁盘,与以前的写入进行二进制差异,以消除重复数据块。。。等等。

Rust 1.15.1标准库中没有此类支持

一旦您实现了这样一种数据结构,它可以处理创建的数据并避免任何内存碎片问题,那么实现
Write
应该很简单

如果64位计算机上存在内存碎片问题(16 EB)
或者较小的48位寻址(256 TB),我建议重新检查您的解决方案是否适合问题域。

关于
std::io::BufWriter
?@ljedrz AFAICS这只是一个中间缓冲区,用于包装另一个写入程序(在刷新之前,它只在缓冲区中存储许多小的写操作,但并不打算成为写入目标)…除非我误解了文档。你的意思是要分配一堆较小的缓冲区,然后在最后将一个缓冲区合并/复制到一个较大的缓冲区中吗?文档中没有列出任何明显的
std::io::Write
实现,因此我认为你需要实现它。这似乎是一个相当特殊的要求除此之外,实现
Write
特性来做你想做的事情非常容易,例如使用
Vec