Mam funkcję, która pobiera obiekt określonego typu, i PrintStream
do drukowania i wyprowadza reprezentację tego obiektu. Jak mogę przechwycić dane wyjściowe tej funkcji w łańcuchu? W szczególności chcę go używać tak, jak w metodzie toString
.Java: PrintStream to String?
90
A
Odpowiedz
156
Użyj ByteArrayOutputStream
jako bufor:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, "utf-8");
yourFunction(object, ps);
String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
ps.close();
22
Można skonstruować PrintStream z ByteArrayOutputStream przekazany do konstruktora, który można później wykorzystać do chwyć tekst napisany na PrintStream.
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
1
Może to pytanie może pomóc: Get an OutputStream into a String
podklasą OutputStream i zawinąć go w PrintStream
-1
Definiowanie i zainicjować zmienną Scanner nazwie INSS że wytwarza strumień ciąg wejściowy z wykorzystaniem String zmiennej myStrLine .
Odp .: Skaner inSS = nowy skaner (myStrLine);
2
Ujednolicenie poprzednich odpowiedzi, ta odpowiedź działa z językiem Java 1.7 i późniejszym. Dodałem też kod do zamykania strumieni.
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();
Chcesz obniżyćCzy tę nazwę zmiennej "S" przypadkiem? Ranisz moje oczy. – Asaph
@Asaph - zachęcamy do ich odwrócenia :-) – ChssPly76
Nie zapomnij zamknąć PrintStream, aby zwolnić wszystkie zasoby. – tobr