Как идиоматически / эффективно передать данные из Read + Seek to Write?

Я хочу взять данные из случайных мест во входном файле и вывести их последовательно в выходной файл. Желательно, без лишних выделений.

Это одно из решений, которое я выяснил:

use std::io::{ self, SeekFrom, Cursor, Read, Write, Seek };

#[test]
fn read_write() {
    // let's say this is input file
    let mut input_file = Cursor::new(b"worldhello");
    // and this is output file
    let mut output_file = Vec::<u8>::new();

    assemble(&mut input_file, &mut output_file).unwrap();

    assert_eq!(b"helloworld", &output_file[..]);
}

// I want to take data from random locations in input file
// and output them sequentially to output file
pub fn assemble<I, O>(input: &mut I, output: &mut O) -> Result<(), io::Error> 
    where I: Read + Seek, O: Write 
{
    // first seek and output "hello"
    try!(input.seek(SeekFrom::Start(5)));
    let mut hello_buf = [0u8; 5];
    try!(input.take(5).read(&mut hello_buf));
    try!(output.write(&hello_buf));

    // then output "world"
    try!(input.seek(SeekFrom::Start(0)));
    let mut world_buf = [0u8; 5];
    try!(input.take(5).read(&mut world_buf));
    try!(output.write(&world_buf));

    Ok(())
}

Давайте не будем беспокоиться о задержке ввода / вывода здесь.

Вопросы:

Есть ли в стабильном Rust какой-нибудь помощник, который берет x байтов из одного потока и передает их в другой поток? Или я должен катиться самостоятельно?Если мне придется катиться самостоятельно, может, есть лучший способ?

Ответы на вопрос(1)

Ваш ответ на вопрос