Java: PrintStream в строку? - PullRequest
       20

Java: PrintStream в строку?

107 голосов
/ 19 ноября 2009

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

Ответы [ 5 ]

177 голосов
/ 19 ноября 2009

Используйте 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);
29 голосов
/ 19 ноября 2009

Вы можете создать PrintStream с помощью ByteArrayOutputStream, переданного в конструктор, который впоследствии можно использовать для захвата текста, записанного в PrintStream.

ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
3 голосов
/ 20 сентября 2017

Объединение предыдущих ответов, этот ответ работает с 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();
1 голос
/ 19 ноября 2009

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

Подкласс OutputStream и упаковка в PrintStream

0 голосов
/ 02 апреля 2017

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

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

...