private ElementValue convertToElementValue(ByteBuffer byteBuffer) {
		byte[] tagByte = {byteBuffer.get()};
		String tag = new String(tagByte);
//		elementValuePair.setElementNameValue(byteBuffer.getShort());
		logger.debug("\t\t\t\t\tElementNameValue.tag : "+ tag);
		ElementValue elementValue = null;
		if (constValueIndex.contains(tag)) {
			ConstValue constValue = new ConstValue();
			constValue.setTag(tag);
			constValue.setConstValueIndex(byteBuffer.getShort());
			elementValue = constValue;
		} else if ("e".equals(tag)) {
			EnumConstValue enumConstValue = new EnumConstValue();
			enumConstValue.setTag(tag);
			enumConstValue.setTypeNameIndex(byteBuffer.getShort());
			enumConstValue.setConstNameIndex(byteBuffer.getShort());
			elementValue = enumConstValue;
		} else if ("c".equals(tag)) {
			ClassInfoValue classInfoValue = new ClassInfoValue();
			classInfoValue.setTag(tag);
			classInfoValue.setClassInfoIndex(byteBuffer.getShort());
			elementValue = classInfoValue;
		} else if ("@".equals(tag)) {
			AnnotationValue annotationValue = new AnnotationValue();
			annotationValue.setTag(tag);
			annotationValue.setAnnotation(convertToAnnotation(byteBuffer));
		} else if ("[".equals(tag)) {
			ArrayValue arrayValue = new ArrayValue();
			arrayValue.setTag(tag);
			arrayValue.setNumValues(byteBuffer.getShort());
			if (arrayValue.getNumValues() > 0) {
				int i = 0;
				ElementValue[] elementValues = new ElementValue[arrayValue.getNumValues()];
				while (i < arrayValue.getNumValues()) {
					ElementValue elementValue2 = convertToElementValue(byteBuffer);
					elementValues[i] = elementValue2;
					i++;
				}
				arrayValue.setElementValues(elementValues);
			}
		} else {
			throw new IllegalStateException("tag = " + tag);
		}
		
		return elementValue;
	}