Not a big deal, but RandomAccess::read() should have a length: usize param, because it's supposed to read the data into memory. The other methods should keep length: u64.
Although, it would be even better to make it more rusty: read(&mut self, offset: u64, buf: &mut [u8]).