Jawaban:
ByteArrayInputStream juga melakukan trik:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Kemudian konversi ke pembaca:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: Sejak: JDK1.0 Tidak ada alasan sedikit pun untuk menganggap bahwa kelas ini adalah "sejak Java 1.4". Nomor versi yang salah itu sangat aneh karena Java 1.4 diperkenalkan NIO
dan tidak masuk akal untuk memperkenalkan API dan penerus konsepnya dalam versi yang sama.
Saya juga menemukan kelas apache commons IOUtils
, jadi:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
akan rugi.
String
menjadi byte[]
array untuk mengkonversi byte kembali ke char
s kemudian ...
Apakah harus secara khusus InputStreamReader? Bagaimana kalau menggunakan StringReader ?
Kalau tidak, Anda bisa menggunakan StringBufferInputStream , tetapi sudah usang karena masalah konversi karakter (itulah sebabnya Anda harus lebih suka StringReader).
Pertanyaan yang sama dengan @Dan - mengapa tidak StringReader?
Jika itu harus InputStreamReader, maka:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
Apakah Anda mencoba untuk mendapatkan) Reader
fungsionalitas keluar InputStreamReader
, atau b) InputStream
fungsionalitas keluar InputStreamReader
? Anda tidak akan mendapatkan b). InputStreamReader
bukan InputStream
.
Tujuannya InputStreamReader
adalah untuk mengambil InputStream
- sumber byte - dan mendekode byte ke karakter dalam bentuk a Reader
. Anda sudah memiliki data Anda sebagai karakter (String asli Anda). Pengkodean String Anda ke dalam byte dan decoding byte kembali ke karakter akan menjadi operasi yang berlebihan.
Jika Anda mencoba untuk Reader
keluar dari sumber Anda, gunakan StringReader
.
Jika Anda mencoba untuk mendapatkan InputStream
(yang hanya memberi Anda byte), gunakan apache commons IOUtils.toInputStream(..)
seperti yang disarankan oleh jawaban lain di sini.