タイトルはかなり自明です。多くの JRE javadoc で、「ストリーム オブ バイト」および「ストリーム オブ 文字」というフレーズが随所に見られます。
しかし、それらは同じものではありませんか?それとも、Java ランドではわずかに異なる (たとえば、解釈が異なる) のでしょうか? 前もって感謝します。
Java では、 abyte
は と同じではありませんchar
。したがって、バイト ストリームは文字ストリームとは異なります。バイトは、任意のバイナリ データを対象としています。文字は、文字列のビルディング ブロックを表すデータ専用です。
ただし、char の幅が 1 バイトしかない場合
そうではないことを除いて。JLS §4.2.1
によると、achar
は次の範囲の数値です。
から包括
'\u0000'
的'\uffff'
、つまり 0 から 65535 まで
ただし、abyte
は範囲内の数値です
-128 から 127 まで (両端を含む)
バイトのストリームは、HEX エディターでファイルを開いたときに表示されるように、単なるバイトです。
文字は単なるバイトとは異なります。ASCII エンコーディングでは 1 文字につき正確に 1 バイトが使用されますが、他の多くのエンコーディングではそうではありません。たとえば、UTF-8 エンコーディングでは、1 ~ 4 バイトを使用して 1 文字をエンコードする場合があります。文字ストリームは、基になるエンコーディングを抽象化し、char
1 種類のエンコーディングを生成するように設計されています (Java では、char
UTF String
-16 エンコーディングを使用します)。
経験則として:
テキストを扱うときは、文字ストリームを使用して、適切なエンコーディングでバイトを文字にデコードする必要があります。
バイナリ データまたはバイナリとテキストの混合を扱う場合は、バイト ストリームを使用する必要があります。そうしないと意味がありません。バイトのシーケンスが特定のエンコーディングで文字列を表す場合、いつでもそれらのバイトを選択し、String(byte[] bytes, Charset charset)
コンストラクターを使用して文字列を取得できます。
それらは違う。char
は Java の 2byte
バイト データ型です。 は 1 バイト データ型です。
編集:char
も署名なしの型ですが、そうでbyte
はありません。
一般に、ストリームについては、何を運ぶかではなく、サイズで説明する方が適切です。バイトのストリームは、char のストリームよりも直感的です。なぜなら、char のストリームを使用すると、char が実際にバイトであり、Unicode の char ではないか、または特殊なものではないことを再確認する必要があるからです。
char は表現であり、バイトで表すことができますが、バイトは常にバイトになります。バイトが 8 ビットでなくなると、すべての世界が燃え尽きてしまいます。