Я немного запутался здесь.
Я бы хотел сделать что-то вроде этого:
- создать какой-то буфер, в который я смогу записать
- очистить буфер
- несколько раз использовать функцию, похожую на printf (), чтобы добавить кучу вещей в буфер, основываясь на некоторых сложных вычислениях, которые я хочу сделать только один раз
- использовать содержимое буфера и распечатать его на несколько
PrintStream
объектов
- при необходимости повторите шаги 2-4
например:.
SuperBuffer sb = new SuperBuffer();
/* SuperBuffer is not a real class, so I don't know what to use here */
PrintStream[] streams = new PrintStream[N];
/* ... initialize this array to several streams ... */
while (!done)
{
sb.clear();
sb.printf("something %d something %d something %d",
value1, value2, value3);
if (some_complicated_condition())
sb.printf("something else %d something else %d", value4, value5);
/* ... more printfs to sb ... */
for (PrintStream ps : streams)
ps.println(sb.getBuffer());
}
Похоже, что обёртка PrintWriter вокруг StringWriter будет делать то, что я хочу для объекта sb
, описанного выше, за исключением того, что нет метода clear()
. Я полагаю, что я мог бы создавать новые объекты PrintWriter и StringWriter каждый раз в цикле, но это похоже на боль. (в моем реальном коде я делаю это в нескольких местах, а не один раз в одном цикле ...)
Я также часто использовал java.nio.CharBuffer
и другие буферы NIO, и это кажется многообещающим подходом, но я не уверен, как можно обернуть их объектом, который даст мне printf()
функциональность.
любой совет?