Какую черту я должен использовать для чтения потока байтов из файлов, TCP-соединений, простых строк ...? - PullRequest
0 голосов
/ 23 апреля 2019

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

  • stdin
  • файлов
  • строки
  • TCP

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

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

1 Ответ

1 голос
/ 24 апреля 2019

Может оказаться полезным использовать черту impl<'_> Read for &' [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(&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(())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...