code: final int deserialize (final ProtocolDataUnit protocolDataUnit, final ByteBuffer src) throws InternetSCSIException {
  
          if (src.remaining() < BHS_FIXED_SIZE) { throw new InternetSCSIException("This Protocol Data Unit does not contain" + " an valid Basic Header Segment."); }
  
          final int firstLine = src.getInt();
          immediateFlag = Utils.isBitSet(firstLine & IMMEDIATE_FLAG_MASK);
          final int code = (firstLine & OPERATION_CODE_MASK) >> Constants.THREE_BYTES_SHIFT;
          operationCode = OperationCode.valueOf((byte) code);
  
          finalFlag = Utils.isBitSet(firstLine & FINAL_FLAG_MASK);
  
          totalAHSLength = src.get();
          dataSegmentLength = Utils.getUnsignedInt(src.get()) << Constants.TWO_BYTES_SHIFT;
          dataSegmentLength += Utils.getUnsignedInt(src.get()) << Constants.ONE_BYTE_SHIFT;
          dataSegmentLength += Utils.getUnsignedInt(src.get());
  
          initiatorTaskTag = src.getInt(BYTES_16_19);
  
          parser = MessageParserFactory.getParser(protocolDataUnit, operationCode);
  
          src.rewind();
  
          parser.deserializeBasicHeaderSegment(src);
  
          return BHS_FIXED_SIZE;
      }
docs: Extract from the given Protocol Data Unit the BHS. After an successful extraction this methods and setreturns the
  right message parser object for this kind of message.
  
  @param protocolDataUnit The reference <code>ProtocolDataUnit</code> instance, which contains this
  <code>BasicHeaderSegment</code> object.
  @param src The bytes representation of a Protocol Data Unit.
  @return The length (in bytes), which are read from <code>pdu</code>.
  @throws InternetSCSIException If any violation of the iSCSI-Standard emerge.