Какую функцию я должен использовать для чтения потока байтов из файлов, TCP-соединений, простых строк …?

#rust

#Ржавчина

Вопрос:

Я хочу написать некоторый код, который может считывать байты из:

  • стандартный файл
  • Файлы
  • строка
  • TCP

и, возможно, другие. Каков наилучший способ сделать это в Rust?

Я думал, что std::io::Read черта — это правильный путь, но, похоже, ей не хватает реализаций, по крайней мере, для строки (мне просто нужен этот конкретный для тестирования — может быть, я могу использовать что-то еще)?

Ответ №1:

Возможно, вам поможет использовать impl<'_> Read for amp;' [u8] функцию для чтения байтов из строки. Как указывает тип, вам придется сначала преобразовать вашу красивую строку в фрагмент байтов. Вот короткий, тупой пример.

 use std::fs::File;
use std::io::{Error, Read, BufReader};

fn whoo<T: Read>(mut readable: T) {
    let mut buffer = [0; 10];
    readable.read(amp;mut buffer).expect("panic");
    println!("{:?}", buffer);
}

fn main() -> Result<(), Error> {
    whoo("hello there".as_bytes());
    whoo("".as_bytes());

    let dict = File::open("/usr/share/dict/words")?;
    let reader = BufReader::new(dict);
    whoo(reader);

    Ok(())
}
  

Комментарии:

1. Оглядываясь назад, кажется довольно очевидным 😉 спасибо за подтверждение, Read это черта для этого.