Неужели N настолько велико, что не закрывать файлы? По крайней мере, на Linux жесткий предел возможных открытых файлов довольно велик. ulimit -Hn
дает мне 1048576 на Xubuntu 20.04. Мягкий предел намного меньше, по умолчанию 1024, но его можно увеличить с помощью ulimit -n N
. Не уверен, какие разумные значения для N есть, но вы можете попробовать использовать то, что, по вашему мнению, является максимальным N, с которым вы столкнетесь в своем приложении. Примечание: я не знаю, накладывает ли Java ограничения, выходящие за рамки того, что делает ОС, или если для сохранения миллиона открытых файлов требуется много памяти (я ожидаю, что стоимость памяти для InputStream будет порядка нескольких КБ). Кроме того, я не знаю, как это работает на Windows.
Единственная золотая середина, которую я могу придумать между постоянным открытием / закрытием файлов или постоянным сохранением всех файлов открытыми, - это обработка ряда файлы за раз и объединить их во временные файлы, а затем объединить временные файлы, чтобы сформировать окончательный результат. Ясно, что это позволяет избежать сценария открытия / закрытия, но происходит за счет более частой перезаписи данных, что может замедлить работу вращающихся дисков и изнашивать твердотельные накопители, если файлы значительного размера.