Работа с данными "на лету", подобная этой, называется streaming . Данные поступают из одного потока, обрабатываются и сохраняются в другом потоке, и вам не нужно помещать все в память.
Если это напрямую из базы данных, ResultSet
не извлекает все строки результатов одновременно. Вы можете безопасно перебирать его в цикле и обрабатывать строки «на лету».
Если это файл, вы можете прочитать его с помощью потока (например, FileInputStream
) и предварительно выбрать меньшие фрагменты. Если это текстовый файл, используйте Reader
для всей автоматической буферизации и разбиения на разрывы строк.
Откуда вы получаете эти данные, вы можете обрабатывать их «на лету» и записывать в выходные данные. Опять же, пишите не в байтовый массив, а в поток - например, FileOutputStream
или Writer
.