6 个版本

使用旧的 Rust 2015

0.3.5 2022 年 8 月 27 日
0.3.4 2022 年 8 月 22 日
0.3.3 2019 年 3 月 20 日
0.3.2 2019 年 2 月 7 日
0.3.0 2018 年 11 月 1 日

#6#pread

每月 49 次下载
2 个包中使用 (通过 qiniu-upload)

MIT 许可证

490KB
1K SLoC

positioned-io-preview 已弃用

本软件包中发布的更改已合并回 positioned-io


lib.rs:

该软件包允许您为读取和写入指定偏移量,而无需更改文件中的当前位置。这与 C 中的 pread()pwrite() 类似。

此类 I/O 的主要优点是

  • 在进行随机访问读取或写入之前无需进行查找,这很方便。
  • 读取不会以任何方式修改文件,因此不需要可变性。

预览版本!

这是 positioned-io 的预览版本。所有示例都假设您正在使用它作为

extern crate positioned_io_preview as positioned_io;

示例

读取文件的第五个 512 字节扇区

#
use std::fs::File;
use positioned_io::ReadAt;

// note that file does not need to be mut
let file = File::open("tests/pi.txt")?;

// read up to 512 bytes
let mut buf = [0; 512];
let bytes_read = file.read_at(2048, &mut buf)?;
#

注意:如果可能,请使用 RandomAccessFile 包装器。在 Windows 上,直接在 File 上使用 ReadAt 非常慢。

将整数写入文件的中间

#
use std::fs::OpenOptions;
use positioned_io::WriteAt;
use byteorder::{ByteOrder, LittleEndian};

// put the integer in a buffer
let mut buf = [0; 4];
LittleEndian::write_u32(&mut buf, 1234);

// write it to the file
let mut file = OpenOptions::new().write(true).open("foo.data")?;
file.write_all_at(1 << 20, &buf)?;

或者,更简单地说

#
use std::fs::OpenOptions;
use byteorder::LittleEndian;
use positioned_io::WriteBytesAtExt;

let mut file = OpenOptions::new().write(true).open("foo.data")?;
file.write_u32_at::<LittleEndian>(1 << 20, 1234)?;

从支持 ReadAt 的任何其他内容读取,例如字节数组

#
{
use byteorder::BigEndian;
use positioned_io::ReadBytesAtExt;

let buf = [0, 5, 254, 212, 0, 3];
let n = buf.as_ref().read_i16_at::<BigEndian>(2)?;
assert_eq!(n, -300);

依赖项