Java: PrintStream в строку?
у меня есть функция, которая принимает объект определенного типа, и PrintStream
к которому печатать, и выводит представление этого объекта. Как я могу захватить вывод этой функции в строку? В частности, я хочу использовать его как в toString
метод.
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