{@code DataInput} may only be used from one thread, because it is not thread safe (it keeps internal state like file position). To allow multithreaded use, every {@code DataInput} instance must be cloned before used in another thread. Subclasses must therefore implement #clone(), returning a new {@code DataInput} which operates on the same underlying resource, but positioned independently.