首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的printf()功能与CharBuffer或类似的东西相结合

Java中的printf()功能与CharBuffer或类似的东西相结合
EN

Stack Overflow用户
提问于 2009-01-02 15:11:24
回答 3查看 1.1K关注 0票数 0

我在这里有点困惑。

我想做这样的事情:

  1. 创建某种我可以写入的缓冲区
  2. 清除缓冲器
  3. 使用printf()-like函数几次,根据一些我只想做一次的复杂计算,将一堆东西附加到缓冲区中
  4. 使用缓冲区的内容并将其打印到多个PrintStream对象
  5. 必要时重复步骤2-4

例如:

代码语言:javascript
复制
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()功能。

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-02 15:23:39

阿:我想我知道了。Formatter类有一个类似于printf()format()方法,它可以构造成环绕实现Appendable的任何类型的对象。CharBuffer实现Appendable,我可以根据需要clear()或读出CharBuffer的内容。

票数 3
EN

Stack Overflow用户

发布于 2009-01-02 15:23:40

为什么在循环中创建一个新的缓冲区很痛苦?垃圾收集器就是为了这个。无论如何,在掩护下需要有一个新的分配。

如果你真的想实现你的SuperBuffer,那就没那么难了。只需使用clear()函数创建一个OutputStream的子类,然后围绕它包装一个PrintStream。如果需要,可以在超级缓冲区中使用CharBuffer。

票数 1
EN

Stack Overflow用户

发布于 2009-01-03 01:46:13

考虑创建一个子类,TeeOutputStream,其OutputStream (或Writer)保存您的流数组并委托给它们。然后用一个PrintStream (或PrintWriter)包装您的流,并在它上调用printf()。不需要临时缓冲区或任何东西:

代码语言:javascript
复制
PrintStream[] streams = new PrintStream[N]; // any output streams really
PrintStream ps = new PrintStream(new TeeOutputStream(streams));

while (!done)
{
    ps.printf("something %d something %d something %d",
              value1, value2, value3);    
    if (some_complicated_condition())
        ps.printf("something else %d something else %d", value4, value5);
    ps.println();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/407026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档