当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Cursor用法及代码示例


本文简要介绍rust语言中 Struct std::io::Cursor 的用法。

用法

pub struct Cursor<T> { /* fields omitted */ }

Cursor 包装内存缓冲区并为其提供 Seek 实现。

Cursor 与内存缓冲区(任何实现 AsRef<[u8]> 的东西)一起使用,以允许它们实现 Read 和/或 Write ,允许这些缓冲区在您可能使用实际执行操作的读取器或写入器的任何地方使用输入/输出。

标准库在通常用作缓冲区的各种类型上实现了一些 I/O 特征,例如 Cursor<Vec<u8>>Cursor<&[u8]>

例子

我们可能想在生产代码中将字节写入 File ,但在测试中使用内存缓冲区。我们可以使用 Cursor 来做到这一点:

use std::io::prelude::*;
use std::io::{self, SeekFrom};
use std::fs::File;

// a library function we've written
fn write_ten_bytes_at_end<W: Write + Seek>(writer: &mut W) -> io::Result<()> {
    writer.seek(SeekFrom::End(-10))?;

    for i in 0..10 {
        writer.write(&[i])?;
    }

    // all went well
    Ok(())
}

// Here's some code that uses this library function.
//
// We might want to use a BufReader here for efficiency, but let's
// keep this example focused.
let mut file = File::create("foo.txt")?;

write_ten_bytes_at_end(&mut file)?;

// now let's write a test
#[test]
fn test_writes_bytes() {
    // setting up a real File is much slower than an in-memory buffer,
    // let's use a cursor instead
    use std::io::Cursor;
    let mut buff = Cursor::new(vec![0; 15]);

    write_ten_bytes_at_end(&mut buff).unwrap();

    assert_eq!(&buff.get_ref()[5..15], &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
}

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::io::Cursor。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。