private int readArray()

in application/org.openjdk.jmc.joverflow/src/main/java/org/openjdk/jmc/joverflow/heap/parser/HprofReader.java [891:976]


	private int readArray(boolean isPrimitive) throws DumpCorruptedException, IOException {
		long objOfsInFile = in.position();
		long id = readID();
		skipBytes(4); // StackTrace stackTrace = getStackTraceFromSerial(in.readInt());
		int num = in.readInt();
		int bytesRead = identifierSize + 8;
		long arrayClassID;
		if (isPrimitive) {
			arrayClassID = in.readByte();
			bytesRead++;
		} else {
			arrayClassID = readID();
			bytesRead += identifierSize;
		}

		// Check for primitive arrays:
		char primitiveSignature = 0x00;
		int elSize = 0;
		if (isPrimitive || version < VERSION_JDK12BETA4) {
			switch ((int) arrayClassID) {
			case T_BOOLEAN: {
				primitiveSignature = 'Z';
				elSize = 1;
				break;
			}
			case T_CHAR: {
				primitiveSignature = 'C';
				elSize = 2;
				break;
			}
			case T_FLOAT: {
				primitiveSignature = 'F';
				elSize = 4;
				break;
			}
			case T_DOUBLE: {
				primitiveSignature = 'D';
				elSize = 8;
				break;
			}
			case T_BYTE: {
				primitiveSignature = 'B';
				elSize = 1;
				break;
			}
			case T_SHORT: {
				primitiveSignature = 'S';
				elSize = 2;
				break;
			}
			case T_INT: {
				primitiveSignature = 'I';
				elSize = 4;
				break;
			}
			case T_LONG: {
				primitiveSignature = 'J';
				elSize = 8;
				break;
			}
			}
			if (version >= VERSION_JDK12BETA4 && primitiveSignature == 0x00) {
				throw new DumpCorruptedException("unrecognized typecode: " + arrayClassID);
			}
		}

		int dataSize = isPrimitive ? elSize * num : identifierSize * num;
		if (in.position() + dataSize > fileSize) {
			throw new DumpCorruptedException((isPrimitive ? "Primitive" : "Object") + " array at position "
					+ in.position() + " is " + dataSize + " bytes long, that does not fit into the dump file");
		}

		bytesRead += dataSize;
		skipBytes(dataSize);

		if (isPrimitive) {
			snpBuilder.addJavaValueArray(id, primitiveSignature, objOfsInFile, num, dataSize);
		} else {
			snpBuilder.addJavaObjectArray(id, arrayClassID, objOfsInFile, num, dataSize);
		}
		if (longFile) {
			handlePossibleBBBorder(objOfsInFile);
		}

		return bytesRead;
	}