ฉันจะแปลงString
ค่าเป็นค่าได้InputStreamReader
อย่างไร
ฉันจะแปลงString
ค่าเป็นค่าได้InputStreamReader
อย่างไร
คำตอบ:
ByteArrayInputStreamยังทำเคล็ดลับ:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
จากนั้นแปลงเป็นโปรแกรมอ่าน:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: ตั้งแต่: JDK1.0 ไม่มีเหตุผลเล็กน้อยที่จะถือว่าคลาสนี้“ ตั้งแต่ Java 1.4” หมายเลขรุ่นที่ผิดนั้นแปลกมากโดยเฉพาะอย่างยิ่ง Java 1.4 ที่นำมาใช้NIO
และมีเหตุผลเล็กน้อยที่จะแนะนำ API และตัวตายตัวแทนที่เป็นแนวคิดในรุ่นเดียวกัน
ฉันยังพบ apache IOUtils
เรียนสามัญดังนั้น:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
จะไม่สูญเสีย
String
เป็นbyte[]
อาเรย์เพื่อแปลงไบท์กลับเป็นchar
s …
ต้องเป็น InputStreamReader โดยเฉพาะหรือไม่ วิธีการเกี่ยวกับการใช้StringReader ?
มิฉะนั้นคุณสามารถใช้StringBufferInputStreamแต่มันเลิกใช้แล้วเนื่องจากปัญหาการแปลงอักขระ (ซึ่งเป็นสาเหตุที่คุณควรเลือก StringReader)
คำถามเดียวกับ@Dan - ทำไมไม่ใช้ StringReader
หากต้องเป็น InputStreamReader ให้ทำดังนี้:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
คุณกำลังพยายามที่จะใช้ a) Reader
ฟังก์ชั่นการใช้งานไม่ได้InputStreamReader
หรือ b) InputStream
ฟังก์ชั่นการใช้งานออกมาInputStreamReader
หรือไม่? คุณจะไม่ได้ข) ไม่ได้เป็นInputStreamReader
InputStream
วัตถุประสงค์ของการInputStreamReader
คือการใช้InputStream
- แหล่งที่มาของไบต์ - Reader
และถอดรหัสไบต์ที่ตัวอักษรในรูปแบบของ คุณมีข้อมูลเป็นตัวอักษรอยู่แล้ว (สตริงเดิมของคุณ) การเข้ารหัสสตริงของคุณเป็นไบต์และการถอดรหัสไบต์กลับไปที่ตัวอักษรจะเป็นการดำเนินการซ้ำซ้อน
ถ้าคุณกำลังพยายามที่จะได้รับจากแหล่งที่มาของการใช้งานReader
StringReader
หากคุณกำลังพยายามที่จะรับInputStream
(ซึ่งให้คุณไบต์เท่านั้น) ใช้ apache คอมมอนส์IOUtils.toInputStream(..)
ตามที่แนะนำโดยคำตอบอื่น ๆ ที่นี่
คุณสามารถลองCactoos :
InputStream stream = new InputStreamOf(str);
ถ้าคุณต้องการReader
:
Reader reader = new ReaderOf(stream);