【发布时间】:2009-01-02 15:11:24
【问题描述】:
我有点困惑。
我想做这样的事情:
- 创建某种我可以写入的缓冲区
- 清空缓冲区
- 根据一些我只想做一次的复杂计算,多次使用类似 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() 功能。
有什么建议吗?
【问题讨论】:
-
你到底想要做什么,你在尝试什么,它是如何不起作用的?请澄清你的问题,我真的不明白。