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".


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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.