code: private void deserializePrimary(byte[] descriptor) throws IOException {
          // according to the spec, some ISO 9660 file systems can contain multiple identical primary
          // volume descriptors
          if (this.hasPrimary) {
              return;
          }
  
          validateBlockSize(descriptor);
  
          if (!this.hasSupplementary) {
              deserializeCommon(descriptor);
          }
  
          this.standardIdentifier = Util.getDChars(descriptor, 2, 5);
          this.volumeSetSize = Util.getUInt16Both(descriptor, 121);
          this.volumeSequenceNumber = Util.getUInt16Both(descriptor, 125);
          this.totalBlocks = Util.getUInt32Both(descriptor, 81);
          this.publisher = Util.getDChars(descriptor, 319, 128);
          this.preparer = Util.getDChars(descriptor, 447, 128);
          this.application = Util.getDChars(descriptor, 575, 128);
          //this.copyrightFile = Descriptor.get(buffer, 703, 37)
          //this.abstractFile = Descriptor.get(buffer, 740, 37)
          //this.bibliographicalFile = Descriptor.get(buffer, 777, 37)
          this.creationTime = Util.getStringDate(descriptor, 814);
          this.mostRecentModificationTime = Util.getStringDate(descriptor, 831);
          this.expirationTime = Util.getStringDate(descriptor, 848);
          this.effectiveTime = Util.getStringDate(descriptor, 865);
          this.pathTableSize = Util.getUInt32Both(descriptor, 133);
          this.locationOfLittleEndianPathTable = Util.getUInt32LE(descriptor, 141);
          this.locationOfOptionalLittleEndianPathTable = Util.getUInt32LE(descriptor, 145);
          this.locationOfBigEndianPathTable = Util.getUInt32BE(descriptor, 149);
          this.locationOfOptionalBigEndianPathTable = Util.getUInt32BE(descriptor, 153);
  
          this.hasPrimary = true;
      }
docs: Read the fields of a primary volume descriptor.
  
  @param descriptor the descriptor bytes
  @throws IOException