マルチバイト文字を読み込む際のInputStreamとInputStreamReaderの違い 質問する

マルチバイト文字を読み込む際のInputStreamとInputStreamReaderの違い 質問する

InputStreamとの違いは、 は と読み取られるのに対し、はと読み取られるInputStreamReaderことです。たとえば、ファイル内のテキストが の場合、どちらも正常に機能します。しかし、テキストが( と 2 つの中国語の文字で構成される)の場合、 は機能しません。InputStreambyteInputStreamReadercharabca你们aInputStream

したがって、 を使用する必要がありますInputStreamReaderが、私の質問は次のとおりです。

文字はどのように認識されますかInputStreamReader?

aは 1 バイトですが、中国語の文字は 2 バイトです。1aバイトとして読み取られ、他の文字は 2 バイトとして認識されるのでしょうか、それともこのテキスト内のすべての文字がInputStreamReader2 バイトとして読み取られるのでしょうか。

ベストアンサー1

は、InputStream生のオクテット (8 ビット) データを読み取ります。Java では、このbyte型は C の型と同等ですchar。C では、この型を使用して文字データまたはバイナリ データを表すことができます。Java では、このchar型は C のwchar_t型と多くの類似点があります。

InputStreamReader、データをあるエンコーディングから UTF-16 に変換します。「a你们」がディスク上で UTF-8 としてエンコードされている場合、バイト シーケンス になります。UTF-8 エンコーディングでを61 E4 BD A0 E4 BB AC渡すと、文字シーケンス として読み取られます。InputStreamInputStreamReader0061 4F60 4EEC

Javaの文字エンコーディングAPIには、この変換を実行するアルゴリズムが含まれています。Oracle JREでサポートされているエンコーディングのリストは、ここICUプロジェクトこれが実際にどのように機能するかの内部を理解したい場合、ここから始めるのが良いでしょう。

アレクサンダー・ポグレブニャク指摘しているほとんどの場合、エンコーディングを明示的に指定する必要があります。エンコーディングを指定しないbyte-to-メソッドは、charJRE デフォルトこれは、オペレーティング システムとユーザー設定に依存します。

おすすめ記事