public synchronized <Data> Data read(final long addr, KeyDescriptor<Data> descriptor) throws IOException {
    try (DataInputStream stream = getStream(addr)) {
      return descriptor.read(stream);
    }
  }
public synchronized <Data> Data read(final long addr, KeyDescriptor<Data> descriptor)