public FileBlock read(InputStream input) throws IOException {
   if (input instanceof FileInputStream) {
     ((FileInputStream) input).getChannel().position(data_offset);
     byte buf[] = new byte[getDatasize()];
     (new DataInputStream(input)).readFully(buf);
     return parseData(buf);
   } else {
     throw new Error("Random access binary reads require seekability");
   }
 }