回答:
ByteArrayInputStreamもトリックを行います:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
次に、リーダーに変換します。
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
:以降: JDK1.0このクラスが「Java 1.4以降」であると想定する理由は、ほとんどありません。その間違ったバージョン番号は、Java 1.4が導入されたときに特に奇妙でありNIO
、APIとその概念的な後継バージョンを同じバージョン内に導入することはほとんど意味がありません。
私はまた、apache commons IOUtils
クラスを見つけたので、
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
ロスレスになります。
String
aのbyte[]
配列への無用な変換については言わないでくださいchar
…
具体的には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();
a)Reader
機能を利用しようとしていますInputStreamReader
か、それともb)InputStream
機能を利用しようとしていますInputStreamReader
か?b)は取得できません。 InputStreamReader
はありませんInputStream
。
の目的はInputStreamReader
、InputStream
-バイトのソース- を取得し、バイトをの形式で文字にデコードすることReader
です。データはすでに文字(元の文字列)として保持されています。文字列をバイトにエンコードし、バイトを文字にデコードして戻す操作は冗長な操作になります。
あなたが取得しようとしている場合はReader
、あなたのソースのうちに、使用StringReader
。
InputStream
(バイトしか得られない)を取得しようとしている場合IOUtils.toInputStream(..)
は、他の回答で提案されているように、Apache Commons を使用してください。