// generate operators names table with name length. assign offset for each record public static void genenerateOperatorsNamesTable() throws Exception { // operatorsNamesBytes HashMap hashNames = new HashMap(); String name; for (int i = 0; i < arraySortedRecords.length; i++) { name = arraySortedRecords[i].operator_name; if (hashNames.containsKey(name)) { Integer offset = (Integer) hashNames.get(name); arraySortedRecords[i].operator_name_offset = offset.intValue(); } else { byte[] nameByteArr = name.getBytes(); // since operatorsNamesBytes.length are always even... int half_offset = operatorsNamesBytes.length() / 2; Validator.validateOperatorNameOffset(half_offset); // validate half_offset arraySortedRecords[i].operator_name_offset = half_offset; int nameLength = nameByteArr.length + 1; // length of name + one byte to present this length. operatorsNamesBytes.addByte((byte) nameLength); operatorsNamesBytes.addBytes(nameByteArr); if ((operatorsNamesBytes.length() % 2) > 0) { // add one dummy byte to make it even operatorsNamesBytes.addByte((byte) 0); } hashNames.put(name, new Integer(half_offset)); } } // create operators Names Table operatorsNamesTable = new BlockTable(operatorsNamesBytes.length()); operatorsNamesTable.appendData(operatorsNamesBytes.getBytes()); Validator.validateOperatorNamesTableSize(operatorsNamesTable.length); }