#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
это черта для этого.