获取一个字节数组的读者

时间:2015-10-21 00:47:51

标签: buffer rust reader

我正在尝试测试一些需要读者的代码。我有一个功能:

fn next_byte<R: Read>(reader: &mut R) -> ...

如何在某些字节数组上测试它?文档说有impl<'a> Read for &'a [u8],这意味着这应该有效:

next_byte(&mut ([0x00u8, 0x00][..]))

但是编译器不同意:

the trait `std::io::Read` is not implemented for the type `[u8]`

为什么呢?我明确地说&mut

使用rust 1.2.0

1 个答案:

答案 0 :(得分:5)

您正在尝试调用next_byte::<[u8]>,但[u8]未实现Read[u8]&'a [u8]的类型不同! [u8]是一个未实现的数组类型,&'a [u8]是一个切片。

当您在切片上使用Read实现时,它需要改变切片,以便从上一次读取结束时恢复下一次读取。因此,您需要将可变借位传递给切片。

这是一个简单的工作示例:

use std::io::Read;

fn next_byte<R: Read>(reader: &mut R) {
    let mut b = [0];
    reader.read(&mut b);
    println!("{} ", b[0]);
}

fn main() {
    let mut v = &[1u8, 2, 3] as &[u8];
    next_byte(&mut v);
    next_byte(&mut v);
    next_byte(&mut v);
}