(Все следующее должно быть написано на Java)
Мне нужно создать приложение, которое будет принимать в качестве входных XML-документов, которые могут быть очень большими. Документ зашифрован - не с использованием XMLsec, а с помощью уже существующего алгоритма шифрования моего клиента - будет обрабатываться в три этапа:
Сначала поток будет расшифрован в соответствии с вышеупомянутым алгоритмом.
Во-вторых, класс расширения (написанный третьей стороной для API, который я предоставляю) будет читать некоторую часть файла. Количество прочитанного не предсказуемо, в частности, оно не гарантируется в заголовке файла, но может произойти в любой точке XML.
Наконец, другой класс расширения (та же сделка) подразделяет входной XML на 1..n подмножества документов. Вполне возможно, что они в какой-то степени будут перекрывать часть документа, которая обрабатывается второй операцией, т.е. я считаю, что мне нужно будет перемотать любой механизм, который я использую для работы с этим объектом.
Вот мой вопрос:
Есть ли способ сделать это, никогда не считывая весь фрагмент данных в память одновременно? Очевидно, что я могу реализовать дешифрование в качестве фильтра входного потока, но я не уверен, возможно ли проанализировать XML так, как я описываю; просматривая большую часть документа, необходимо собрать информацию о втором шаге, а затем перемотав документ и пропустив его снова, чтобы разделить его на рабочие места, в идеале выпуская все части документа, которые больше не используются после они были пройдены.