private void readTableHeader() throws IOException {
		
		long columnCount = nraf.readUnsignedInt();
		long l = 0;
		StringBuilder sb;
		Set<String> row = new LinkedHashSet<String>();

		while(l < columnCount) {
			
			sb = new StringBuilder();
			long charCount = nraf.readUnsignedInt();
			long m = 0;
			
			while(m < charCount) {
				
				sb.append(nraf.readUTF16());
				m++;
			}
			
			row.add(sb.toString());			
			l++;
		}
		
		// The column count is written twice. The first one at the beginning
		// of the table header and the second at the end(or at the beginning of the data type table). 
		if(columnCount != nraf.readUnsignedInt())
			throw new IOException("Table header mismatch with the column count.");
		this.columnCount = columnCount;
		writeCSVRow(row);
	}