Відповіді:
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[]масив для перетворення байтів назад в chars тоді…
Чи повинен це бути конкретно 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(..)як пропонують інші відповіді.