@Override
  public void close() throws IOException {
    // Write back the mapping file if it has been changed
    if (sectorMappingDirty) {
      writeMappingFile();
    }

    sectorDevice.close();
  }
 @Override
 public void readSector(int sectorNumber, byte[] buffer, int offset) throws IOException {
   int mappedSectorNumber = mapSector(sectorNumber);
   if (mappedSectorNumber >= 0) {
     sectorDevice.readSector(mappedSectorNumber, buffer, offset);
   } else {
     Arrays.fill(buffer, offset, offset + sectorLength, (byte) 0);
   }
 }
  @Override
  public void writeSector(int sectorNumber, byte[] buffer, int offset) throws IOException {
    int freeSectorNumber = getFreeSectorNumber();
    if (freeSectorNumber < 0) {
      throw new IOException(String.format("Sector Device '%s' is full", mappingFile));
    }

    sectorDevice.writeSector(freeSectorNumber, buffer, offset);
    setSectorMapping(freeSectorNumber, sectorNumber);
  }