Apa cara terbaik untuk mem-pipe output dari java.io.OutputStream ke String di Java?
Katakanlah saya punya metode:
writeToStream(Object o, OutputStream out)
Yang menulis data tertentu dari objek ke aliran yang diberikan. Namun, saya ingin mendapatkan output ini menjadi String semudah mungkin.
Saya sedang mempertimbangkan untuk menulis kelas seperti ini (belum diuji):
class StringOutputStream extends OutputStream {
StringBuilder mBuf;
public void write(int byte) throws IOException {
mBuf.append((char) byte);
}
public String getString() {
return mBuf.toString();
}
}
Tetapi apakah ada cara yang lebih baik? Saya hanya ingin menjalankan tes!
Jawaban:
Saya akan menggunakan
ByteArrayOutputStream
. Dan pada akhirnya Anda dapat menghubungi:atau lebih baik:
Untuk
String
konstruktor,codepage
bisa berupaString
instance dari java.nio.charset.Charset . Nilai yang mungkin adalah java.nio.charset.StandardCharsets.UTF_8 .Metode
toString()
hanya menerimaString
sebagaicodepage
parameter (Java berdiri 8).sumber
defaultCharset
tidak lebih baik daripada mengabaikan charset sama sekali - Anda perlu mencari tahu apa itu sebelum Anda menggunakantoString
StandardCharsets.UTF_8
adalah aCharset
, bukan aString
. Apalagi parameternya dipanggilcharsetName
, bukancodepage
.Saya suka perpustakaan Apache Commons IO. Lihatlah versi ByteArrayOutputStream , yang memiliki
toString(String enc)
metode jugatoByteArray()
. Menggunakan komponen yang ada dan tepercaya seperti proyek Commons memungkinkan kode Anda menjadi lebih kecil dan lebih mudah untuk diperluas dan digunakan kembali.sumber
Ini bekerja dengan baik
metode panggilan = >>
marshaller.marshal( (Object) toWrite , (OutputStream) output);
kemudian untuk mencetak string atau mendapatkannya hanya referensi aliran "output" itu sendiri Sebagai contoh, untuk mencetak string ke konsol = >>
System.out.println(output);
FYI: pemanggilan metode saya
marshaller.marshal(Object,Outputstream)
adalah untuk bekerja dengan XML. Itu tidak relevan dengan topik ini.Ini sangat boros untuk penggunaan produk, ada terlalu banyak konversi dan agak longgar. Ini hanya kode untuk membuktikan kepada Anda bahwa sangat mungkin untuk membuat OuputStream khusus dan menghasilkan string. Tapi jalan Horcrux7 dan semuanya baik hanya dengan dua metode panggilan.
Dan dunia hidup di hari lain ....
sumber
Inilah yang akhirnya saya lakukan:
Di mana os adalah
ByteArrayOutputStream
.sumber
"UTF-8"
denganStandardCharsets.UTF_8
.Java 14 - https://docs.oracle.com/
sumber