15

タイトルはかなり自明です。多くの JRE javadoc で、「ストリーム オブ バイト」および「ストリーム オブ 文字」というフレーズが随所に見られます。

しかし、それらは同じものではありませんか?それとも、Java ランドではわずかに異なる (たとえば、解釈が異なる) のでしょうか? 前もって感謝します。

4

4 に答える 4

24

Java では、 abyteは と同じではありませんchar。したがって、バイト ストリームは文字ストリームとは異なります。バイトは、任意のバイナリ データを対象としています。文字は、文字列のビルディング ブロックを表すデータ専用です。

ただし、char の幅が 1 バイトしかない場合

そうではないことを除いてJLS §4.2.1 によると、acharは次の範囲の数値です。

から包括'\u0000''\uffff'、つまり 0 から 65535 まで

ただし、abyteは範囲内の数値です

-128 から 127 まで (両端を含む)

于 2013-02-26T20:06:32.567 に答える
7

バイトのストリームは、HEX エディターでファイルを開いたときに表示されるように、単なるバイトです。

文字は単なるバイトとは異なります。ASCII エンコーディングでは 1 文字につき正確に 1 バイトが使用されますが、他の多くのエンコーディングではそうではありません。たとえば、UTF-8 エンコーディングでは、1 ~ 4 バイトを使用して 1 文字をエンコードする場合があります。文字ストリームは、基になるエンコーディングを抽象化し、char1 種類のエンコーディングを生成するように設計されています (Java では、charUTF String-16 エンコーディングを使用します)。

経験則として:

  • テキストを扱うときは、文字ストリームを使用して、適切なエンコーディングでバイトを文字にデコードする必要があります。

  • バイナリ データまたはバイナリとテキストの混合を扱う場合は、バイト ストリームを使用する必要があります。そうしないと意味がありません。バイトのシーケンスが特定のエンコーディングで文字列を表す場合、いつでもそれらのバイトを選択し、String(byte[] bytes, Charset charset)コンストラクターを使用して文字列を取得できます。

于 2013-02-26T20:10:46.267 に答える
5

それらは違う。charは Java の 2byteバイト データ型です。 は 1 バイト データ型です。

編集:charも署名なしの型ですが、そうでbyteはありません。

于 2013-02-26T20:07:13.477 に答える
0

一般に、ストリームについては、何を運ぶかではなく、サイズで説明する方が適切です。バイトのストリームは、char のストリームよりも直感的です。なぜなら、char のストリームを使用すると、char が実際にバイトであり、Unicode の char ではないか、または特殊なものではないことを再確認する必要があるからです。

char は表現であり、バイトで表すことができますが、バイトは常にバイトになります。バイトが 8 ビットでなくなると、すべての世界が燃え尽きてしまいます。

于 2013-02-26T20:13:36.680 に答える