Математика для Программистов . Хорошее чтение.
Использовать ByteArrayOutputStream
в качестве буфера:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (PrintStream ps = new PrintStream(baos, true, "UTF-8")) {
yourFunction(object, ps);
}
String data = new String(baos.toByteArray(), StandardCharsets.UTF_8);
Вы можете создать PrintStream с ByteArrayOutputStream, переданным в конструктор, который позже можно будет использовать для захвата текста, записанного в PrintStream.
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
Возможно, вам поможет этот вопрос: Получить OutputStream в String
Подкласс OutputStream и заключить его в PrintStream