ฉันจะแปลงสตริงเป็น InputStream ใน Java ได้อย่างไร


คำตอบ:


1410

แบบนี้:

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

โปรดทราบว่านี่ถือว่าคุณต้องการ InputStream ซึ่งเป็นสตรีมของไบต์ที่แทนสตริงเดิมของคุณที่เข้ารหัสเป็นUTF-8 UTF-8

สำหรับรุ่นของ Java น้อยกว่า 7 แทนที่ด้วยStandardCharsets.UTF_8"UTF-8"


1
ชุดอักขระนี้ไม่หายไปเมื่อทำ: String -> bytes -> ByteArrayInputStream? เมื่อลองใช้ตัวอย่างเช่น "ü" ไบต์จะมีตัวอักษรที่ถูกต้อง แต่ ByteArrayInputStream จะสูญเสียการแปลงที่ถูกต้อง หรือฉันผิด
Jonathan Ramos

20
StandardCharsets ต้องการระดับ API ขั้นต่ำ 19
Nantoka

3
@JonathanRamos มันไม่ได้ขึ้นอยู่กับกระแสที่จะถือการแปลง มันขึ้นอยู่กับสิ่งที่ถอดรหัสไบต์กลับเป็นสตริง
Cruncher

26
@Nantoka แทน StandardCharsets.UTF_8 คุณสามารถใช้ Charset.forName ("UTF-8") สำหรับ API ระดับใดก็ได้
PJ_Finnegan

มันทำงานเพียงฉันเพิ่ม String newStr = URLDecoder.decode (URLEncoder.encode (ตอบสนอง "iso8859-1"), "UTF-8"); for (utf8)
sirmagid

275

ฉันพบว่าการใช้Apache Commons IOทำให้ชีวิตของฉันง่ายขึ้นมาก

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

คุณอาจพบว่าห้องสมุดมีทางลัดอื่น ๆ มากมายให้กับงานที่ทำโดยทั่วไปซึ่งคุณสามารถใช้ในโครงการของคุณได้


5
พวกเขาใช้ ByteArrayInputStream ใหม่ (exampleString.getBytes ("UTF-8")) ดังนั้นมันจะได้รับการปรับวิธีการใช้ InputStream stream = ใหม่ ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar

9
@PankajKumar: คอมไพเลอร์ JIT ของ Java นั้นมากกว่าที่จะแทรกซึมเข้าไปได้
แอนดรูว์ไวท์

8
ใช้วิธีการที่ไม่ได้ระบุการเข้ารหัสเป็นความคิดที่น่ากลัว ...
b1nary.atr0phy

2
@ b1naryatr0phy: Apache Commons รวมรูปแบบอื่นของวิธีการนี้ซึ่งใช้การเข้ารหัสเป็นพารามิเตอร์ตัวที่สอง (ซึ่งคุณพูดถูกแล้วดีกว่า): InputStream ใน = IOUtils.toInputStream (แหล่งที่มา "UTF-8");
Cuga

8
คุณสามารถใช้StandardCharsets.UTF_8คำนิยามแทนข้อความธรรมดา
douglaslps

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.