io-arrays

Crates.ioio-arrays
lib.rsio-arrays
version0.14.1
sourcesrc
created_at2021-02-11 03:21:50.138469
updated_at2024-01-11 06:12:41.909132
descriptionRandom-access I/O
homepage
repositoryhttps://github.com/sunfishcode/io-arrays
max_upload_size
id353639
size140,028
Dan Gohman (sunfishcode)

documentation

README

io-arrays

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.

Commit count: 111

cargo fmt