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)
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);