Ну, Reader работает с символами, а InputStream - с байтами. Кодировка определяет, как вы хотите представлять свои символы в байтах, поэтому вы не можете игнорировать проблему. Что касается избежания проблем, мое мнение таково: выберите одну кодировку (например, «UTF-8») и придерживайтесь ее.
Относительно того, как на самом деле это сделать, как было указано, « очевидные имена для этих классов: ReaderInputStream и WriterOutputStream . « Удивительно » они не включены в библиотеку Java", хотя" противоположные "классы InputStreamReader и OutputStreamWriter включены.
Итак, многие люди придумали свои собственные реализации, включая Apache Commons IO . В зависимости от проблем с лицензированием, вы, вероятно, сможете включить библиотеку commons-io в свой проект или даже скопировать часть исходного кода (который можно загрузить здесь ).
Как видите, в документации обоих классов говорится, что "все кодировки charset, поддерживаемые JRE, обрабатываются правильно".
N.B. В комментарии к одному из других ответов здесь упоминается эта ошибка . Но это влияет на класс Apache Ant ReaderInputStream ( здесь ), не Apache Commons IO Класс ReaderInputStream.