Bagaimana cara mengonversi String ke InputStream di Java?

Jawaban:

1410

Seperti ini:

InputStream stream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));

Perhatikan bahwa ini mengasumsikan bahwa Anda menginginkan InputStream yang merupakan aliran byte yang mewakili string asli Anda yang dikodekan sebagai UTF-8 .

Untuk versi Java kurang dari 7, ganti StandardCharsets.UTF_8dengan "UTF-8".

Iain
sumber
1
Bukankah charset ini hilang ketika melakukan: String -> bytes -> ByteArrayInputStream? Ketika mencoba ini pada contoh "ü", byte akan memiliki huruf yang tepat, tetapi ByteArrayInputStream akan kehilangan konversi yang tepat. Atau saya salah?
Jonathan Ramos
20
StandardCharsets membutuhkan API level minimum 19.
Nantoka
3
@JonathanRamos tidak tergantung pada arus untuk menahan konversi. Terserah apa pun yang mendekode byte kembali ke string.
Cruncher
26
@Nantoka Alih-alih StandardCharsets.UTF_8 Anda dapat menggunakan Charset.forName ("UTF-8") untuk Level API apa pun.
PJ_Finn Mulai
kerjanya hanya saya tambahkan String newStr = URLDecoder.decode (URLEncoder.encode (response, "iso8859-1"), "UTF-8"); untuk (utf8)
sirmagid
275

Saya menemukan bahwa menggunakan Apache Commons IO membuat hidup saya lebih mudah.

String source = "This is the source of my input stream";
InputStream in = org.apache.commons.io.IOUtils.toInputStream(source, "UTF-8");

Anda mungkin menemukan bahwa perpustakaan juga menawarkan banyak pintasan lain untuk tugas-tugas yang biasa dilakukan yang mungkin dapat Anda gunakan dalam proyek Anda.

Elia
sumber
5
Mereka menggunakan ByteArrayInputStream baru (exampleString.getBytes ("UTF-8")). Jadi itu akan dioptimalkan cara untuk menggunakan aliran InputStream = ByteArrayInputStream baru (exampleString.getBytes ("UTF-8"));
Pankaj Kumar
9
@PankajKumar: Kompiler JIT Java lebih dari mampu untuk inline
Andrew White
8
Menggunakan metode yang tidak menentukan pengkodean adalah ide yang buruk ...
b1nary.atr0phy
2
@ b1naryatr0phy: Apache commons menyertakan bentuk lain dari metode ini yang menggunakan pengkodean sebagai parameter kedua (yang, Anda benar, lebih disukai): InputStream di = IOUtils.toInputStream (sumber, "UTF-8");
Cuga
8
Anda dapat menggunakan StandardCharsets.UTF_8definisi alih-alih teks biasa.
douglaslps