How to write a fixed length less than buffer length to an output stream?


#1
fn write_all(&mut self, buf: &[u8]) -> Result<()>

but i need something like

fn write_all(&mut self, buf: &[u8], len:u32) -> Result<()>

The len is the “true” length i want to write.

What should i do?


#2

You can slice the buffer to the length you want before calling write_all, e.g. w.write_all(&buf[..len]).


#3

Thanks.

Will this cost more memory and cpu time?


#4

Almost certainly no, but it depends on exactly what you’re comparing to. Either way, it doesn’t use any extra memory (a subslice points right into the array it was sliced from), and it’ll be a very small amount of extra time, i.e. double digit nanoseconds, or less (almost certainly closer to 1 ns than 50 ns).

A version of write_all that took a len argument would likely just do the same sort of slicing internally anyway, meaning internal or external slicing will be essentially equivalent.