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 NIOdan 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.
Stringmenjadi byte[]array untuk mengkonversi byte kembali ke chars 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) Readerfungsionalitas keluar InputStreamReader, atau b) InputStreamfungsionalitas keluar InputStreamReader? Anda tidak akan mendapatkan b). InputStreamReaderbukan InputStream.
Tujuannya InputStreamReaderadalah 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 Readerkeluar 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.