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

标签 java stream printf

我在这里有点困惑。

我想做这样的事情:

  1. 创建某种可以写入的缓冲区
  2. 清除缓冲区
  3. 多次使用类似 printf() 的函数,根据一些我只想执行一次的复杂计算将一堆内容附加到缓冲区中
  4. 使用缓冲区的内容并将其打印到多个 PrintStream 对象
  5. 根据需要重复步骤 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() 功能。

有什么建议吗?

最佳答案

啊:我想我已经明白了。 Formatter类有一个 format() 方法,类似于 printf(),并且可以构造它来包装任何实现 Appendable 的对象。 CharBuffer实现 Appendable,我可以根据需要 clear() 或读出 CharBuffer 的内容。

关于java - Java 中的 printf() 功能与 CharBuffer 或类似的东西相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/407026/

相关文章:

c++ - 使用 %。在 printf 中

java - 多个准备好的语句或一个批处理

java - 如何在 Java 中为表 JOINS 实现 DAO/DTO?

node.js:创建连接的可写和可读流对

java - 如何转换/ fork Kafka 流并将其发送到特定主题?

c++ - 是否有格式处理器可以编写我自己的类似 printf 的函数并保留 %d 样式参数,而不使用 sprintf?

java - 一条先于其他指令/语句的指令/语句是否保证首先执行?

java - 让 JSoup 报告 HTML 无效的原因

c# - 如何使用 C# 将 base64 值从数据库转换为流

C++ - 全局 setlocale 有效,传递给 _vsnprintf_l 的相同语言环境无效