Get a OutputStream into a String
Jaki jest najlepszy sposób na przekierowanie wyjścia z java. io. OutputStream do ciągu znaków w Javie?
Powiedzmy, że mam metodę:
writeToStream(Object o, OutputStream out)
Który zapisuje określone dane z obiektu do podanego strumienia. Jednak chcę, aby to wyjście w ciąg znaków tak łatwo, jak to możliwe.
Rozważam napisanie takiej klasy (nieprzetestowanej):
class StringOutputStream extends OutputStream {
StringBuilder mBuf;
public void write(int byte) throws IOException {
mBuf.append((char) byte);
}
public String getString() {
return mBuf.toString();
}
}
Ale czy jest lepszy sposób? Chcę tylko zrobić test! 4 answers
Użyłbym ByteArrayOutputStream
. A na finiszu można zadzwonić:
new String( baos.toByteArray(), codepage );
Lub lepiej
baos.toString( codepage );
Dla konstruktora Łańcuchowego codepage
może być łańcuchem lub instancją Javy.nio.charset.Charset . Możliwa wartość to java.nio.charset.Standardowe zestawy.UTF_8 .
Metoda ToString akceptuje tylko Łańcuch znaków jako parametr codepage
(stand Java 8).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-14 12:20:37
Lubię bibliotekę Apache Commons IO. Spójrz na jego wersję ByteArrayOutputStream , która ma metodę toString(String enc)
oraz toByteArray()
. Korzystanie z istniejących i zaufanych komponentów, takich jak projekt Commons, pozwala na mniejsze i łatwiejsze rozszerzanie i zmienianie przeznaczenia kodu. Powodzenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 14:43:50
To działało ładnie
OutputStream output = new OutputStream()
{
private StringBuilder string = new StringBuilder();
@Override
public void write(int b) throws IOException {
this.string.append((char) b );
}
//Netbeans IDE automatically overrides this toString()
public String toString(){
return this.string.toString();
}
};
Wywołanie metody =>> marshaller.marshal( (Object) toWrite , (OutputStream) output);
Następnie, aby wydrukować łańcuch lub uzyskać go, po prostu odwołaj się do samego strumienia" output"
Jako przykład, aby wydrukować ciąg znaków na konsoli =>> System.out.println(output);
FYI: moje wywołanie metody {[3] } jest do pracy z XML. Nie ma to znaczenia w tym temacie.
Jest to bardzo marnotrawne dla użytku produkcyjnego, jest zbyt wiele konwersji i jest trochę luźne. To zostało zakodowane, aby udowodnić, że jest całkowicie możliwe, aby utworzyć Niestandardowy OuputStream i wypisuje ciąg znaków. Ale wystarczy przejść Horcrux7 sposób i wszystko jest dobre z zaledwie dwóch wywołań metody.
I świat żyje w innym dniu....Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 14:48:11
Oto co zrobiłem:
Obj.writeToStream(toWrite, os);
try {
String out = new String(os.toByteArray(), "UTF-8");
assertTrue(out.contains("testString"));
} catch (UnsupportedEncondingException e) {
fail("Caught exception: " + e.getMessage());
}
Gdzie os jest ByteArrayOutputStream
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-22 16:28:50