Відповіді:
ByteArrayInputStream також виконує трюк:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Потім перетворите на читач:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: З: JDK1.0 Існує не найменшої причини вважати, що цей клас є «з Java 1.4». Цей неправильний номер версії особливо дивний, як представлена Java 1.4, NIO
і мало сенсу впроваджувати API та його спадкового спадкоємця в одній версії.
Я також знайшов IOUtils
клас apache commons , так що:
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();
Ви намагаєтеся Reader
вилучити а) функціональність InputStreamReader
або б) InputStream
функціональність InputStreamReader
? Ви не отримаєте б). InputStreamReader
не єInputStream
.
Мета InputStreamReader
- взяти InputStream
- джерело байтів - і розшифрувати байти до символів у вигляді аReader
. Ви вже маєте свої дані як символи (ваш початковий рядок). Кодування вашої рядка в байти та декодування байтів назад до символів було б зайвою операцією.
Якщо ви намагаєтеся Reader
вийти з джерела, використовуйтеStringReader
.
Якщо ви намагаєтеся отримати InputStream
(що дає лише байти), використовуйте апаш-общи, IOUtils.toInputStream(..)
як пропонують інші відповіді.