Java: PrintStream в строку?


у меня есть функция, которая принимает объект определенного типа, и PrintStream к которому печатать, и выводит представление этого объекта. Как я могу захватить вывод этой функции в строку? В частности, я хочу использовать его как в toString метод.

5 101

5 ответов:

использовать 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");

объединение предыдущих ответов, этот ответ работает с Java 1.7 и после. Кроме того, я добавил код для закрытия потоков.

final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();

может быть, этот вопрос может помочь вам: получить OutputStream в строку

подкласс OutputStream и обернуть его в PrintStream

определите и инициализируйте переменную сканера с именем inSS, которая создает входной строковый поток с помощью строковой переменной myStrLine.

Ans: Scanner inSS = новый сканер (myStrLine);