15 releases (breaking)

0.12.2 Mar 29, 2023
0.12.0 Nov 27, 2022
0.10.0 Jun 23, 2022
0.9.0 Feb 1, 2022
0.3.0 Mar 5, 2021

#1381 in Rust patterns

47 downloads per month
Used in nameless




Random-access I/O

Github Actions CI Status crates.io page docs.rs docs

Think of an I/O array as a Vec<u8> which lives outside the program. You can index into it and copy data in and out. You can append to it or shrink it from the back.

In I/O terms, an I/O array is an abstraction of a "file". It supports doing I/O at arbitrary offsets, appending, and truncating. You can read from it in a streaming fashion using ReadAt::read_via_stream_at.

TODO: Writing to an array in a streaming fashion is not yet supported.

This crate defines ReadAt, WriteAt, and EditAt traits which define interfaces to random-access or seekable devices, such as normal files, block devices, disk partitions, and memory buffers.

It also defines ArrayReader, ArrayWriter, and ArrayEditor types which implement the above traits and and can be constructed from any file-like type. On Posix-ish platforms, with support for WASI in development, these types just contain a single file descriptor (and implement AsRawFd), plus any resources needed to safely hold the file descriptor live. On Windows, they contain a single file handle (and implement AsRawHandle).

Support for async-std is temporarily disabled until those crates contain the needed implementations of the I/O safety traits.


~127K SLoC