При вводе / выводе запоминающее устройство обычно является ограничивающим фактором, делающим время пропорциональным размеру файла. Использование двоичного формата вместо XML, безусловно, является шагом в правильном направлении, так как это сократит как размер файла, так и накладные расходы на обработку.
Однако, возможно, стоит подумать о дальнейшем уменьшении размера. Например, вам действительно нужны целые или достаточно шорт? Будут ли строки использовать весь алфавит Юникода, или вы можете использовать однобайтовую кодировку символов?
Самый простой способ написать файл двоичных данных - это использовать сериализацию Java, поэтому сначала я попробую (обязательно используйте BufferedOutputStream, конечно). Использование простого DataOutputStream будет немного быстрее во время выполнения и приведет к несколько более коротким файлам (из-за отсутствия дескрипторов типов), но вам придется писать поля самостоятельно.
После того, как вы это сделаете, стоит оценить, является ли CPU или I / O ограничивающим фактором (например, наблюдая за использованием CPU во время записи файла). Если у вас есть запасной процессор и достаточно регулярные данные, вы можете ускорить запись, сжимая файл на лету, например, используя GZipOutputStream.