Как пишет Арне, объем буферного пространства в потоке по конвейеру довольно мал. Если вы не можете использовать буфер, который может хранить все данные (будь то в памяти или на диске), то вы можете попробовать посмотреть, можете ли вы запустить обработку шаблона в другом потоке с потоковым потоком, отправляющим результаты обратно. в основной поток, где вы делаете это.
PipedInputStream pi = new PipedInputStream();
final Writer writer = new OutputStreamWriter(new PipedOutputStream(pi));
Thread worker = new Thread(new Runnable() {
public void run() {
configuration.getTemplate("xx").process(rootMap, writer);
}
});
worker.start();
Возможно, вам понадобится добавить final
ключевые слова к другим переменным, чтобы это работало в вашем реальном коде. Это зависит от того, являются ли переменная configuration
, аргумент getTemplate
или переменная rootMap
локальными переменными или переменными экземпляра (или класса).
(Я мог бы, конечно, указать подкласс Thread
при указании поведения потока, но я предпочитаю создавать экземпляр интерфейса - Runnable
в этом случае - для таких вещей.)