Was ist der beste Weg, um die Ausgabe von einem java.io.OutputStream an einen String in Java weiterzuleiten?
Angenommen, ich habe die Methode:
writeToStream(Object o, OutputStream out)
Womit bestimmte Daten vom Objekt in den angegebenen Stream geschrieben werden. Ich möchte diese Ausgabe jedoch so einfach wie möglich in einen String umwandeln.
Ich denke darüber nach, eine Klasse wie diese zu schreiben (ungetestet):
class StringOutputStream extends OutputStream {
StringBuilder mBuf;
public void write(int byte) throws IOException {
mBuf.append((char) byte);
}
public String getString() {
return mBuf.toString();
}
}
Aber gibt es einen besseren Weg? Ich möchte nur einen Test durchführen!
Antworten:
Ich würde ein verwenden
ByteArrayOutputStream
. Und am Ende können Sie anrufen:oder besser:
Für den
String
Konstruktorcodepage
kann dies eineString
oder eine Instanz von java.nio.charset.Charset sein . Ein möglicher Wert ist java.nio.charset.StandardCharsets.UTF_8 .Die Methode
toString()
akzeptiert nur aString
alscodepage
Parameter (Stand Java 8).quelle
defaultCharset
ist nicht besser als den Zeichensatz insgesamt zu ignorieren - Sie müssen herausfinden, was es ist, bevor Sie verwendentoString
StandardCharsets.UTF_8
ist einCharset
, keinString
. Außerdem wird der ParametercharsetName
nicht aufgerufencodepage
.Ich mag die Apache Commons IO-Bibliothek. Schauen Sie sich die Version von ByteArrayOutputStream an , die auch eine
toString(String enc)
Methode enthälttoByteArray()
. Durch die Verwendung vorhandener und vertrauenswürdiger Komponenten wie des Commons-Projekts kann Ihr Code kleiner und einfacher erweitert und für andere Zwecke verwendet werden.quelle
Das hat gut funktioniert
Methodenaufruf = >>
marshaller.marshal( (Object) toWrite , (OutputStream) output);
Um die Zeichenfolge zu drucken oder abzurufen, verweisen Sie einfach auf den "Ausgabe" -Stream selbst. Beispiel: Drucken Sie die Zeichenfolge auf console = >> aus
System.out.println(output);
Zu Ihrer Information: Mein Methodenaufruf
marshaller.marshal(Object,Outputstream)
ist für die Arbeit mit XML. Es ist für dieses Thema irrelevant.Dies ist für den produktiven Gebrauch sehr verschwenderisch, es gibt viel zu viele Konvertierungen und es ist ein bisschen locker. Dies wurde nur codiert, um Ihnen zu beweisen, dass es durchaus möglich ist, einen benutzerdefinierten OuputStream zu erstellen und eine Zeichenfolge auszugeben. Aber gehen Sie einfach Horcrux7 Weg und alles ist gut mit nur zwei Methodenaufrufen.
Und die Welt lebt an einem anderen Tag ...
quelle
Folgendes habe ich getan:
Wo os ist ein
ByteArrayOutputStream
.quelle
"UTF-8"
mitStandardCharsets.UTF_8
.Java 14 - https://docs.oracle.com/
quelle