Seekable is implemented by streams (implementations of InputStream or OutputStream) that support seeking.
Seekable streams largely fall into two categories: resizable and fixed-size.
Seekable on fixed-sized streams is approximately the same as POSIX lseek
on a block device (
for example: attmepting to seek past the end of the device is an error). Fixed streams typically cannot be truncated.
Seekable on resizable streams is approximately the same as POSIX lseek
on a normal file.
Seeking past the end and writing data will usually cause the stream to resize by introducing zero bytes.