javaのバイトと文字の違いについて話します。
最近JavaのIO関連の知識を見ていますが、バイトと文字に対する理解が足りないことが分かりました。まとめて書いてください。
バイト
バイト(Byte)とは、コンピュータデータストアの計測単位です。1つのバイナリビットはビット(bit)と呼ばれ、8ビットは1バイトを構成し、つまり1バイトは256個の整数(0〜255)を区別するために使用できます。これにより、バイトはコンピュータデータストアおよび転送の基本単位であり、後続の文字はバイト単位で記憶されており、異なる符号化された文字の占有バイト数が異なることが分かる。
Javaでは、格納の意味に加えて、JavaはバイトByteを1つの基本データタイプとして、メモリ内にバイトを占有し、(−128〜127)範囲内の整数に使用する。
格納された単位Javaのデータタイプは、-128~127の範囲の整数を表すために使用されます。
二、文字
計算機の下にはバイトが格納されています。文字のデザインは記号を示すためのものです。画面に表示される各種の文字、数字、記号などは復号された文字です。したがって、文字は表示のための記号であり、記憶されているバイトを分かりやすい記号に変換するので、文字の核心はバイトと展示記号との関係を定義することであり、このマッピング関係は符号化と呼ばれることが多い。
2.1、コードの由来
なぜコードしますか?前に、データはすべてバイト単位でコンピュータに格納されていることが分かりました。バイトは256個の整数を区別できます。最も考えやすいのは、256個の整数を256個の状態と定義し、それぞれ256個の文字に対応しています。でも、人間の記号が多すぎて、256種類は足りません。複数のバイトを統合して人間の言語記号を表すと考えられています。符号化の問題はバイトの組み合わせになります。
2.2、符号化の一般的なフォーマット
今は多くのコードフォーマットがあります。ASCII、ISO-859-1、GB 2312、GBK、UTF-8、UTF-16などがあります。
ASCIIコードは最も基本的なコードフォーマットで、標準のASCIIコードは全部で128個あり、バイトの低い7桁を占めています。英語系言語の記号を全部カバーできますが、全体的には表現できる文字はまだ非常に限られています。
ISO-859-1符号化はASCII符号化の一種の拡張であり、バイトの8ビットを使って256種類の文字を表し、そして下向きのASCIIに対応し、圧倒的多数の西欧記号を含んでいます。
GB 2312は2バイトの符号化であり、2バイトを使って記号を表し、6763文字が含まれている。
GBKはGB 2312の拡張であり、バイトコードでもあり、漢字2103個を表し、GB 2312を下向きにすることができる。
…
コードの仕様はますます多くなりました。異なる言語の国では自分の言語記号コード基準を定義しています。一時的にコード化基準が百花斉放で、インターネットの時代ではコミュニケーションが非常に不便で、異なった符号化システムの間の情報交流はすべて異なった復号方式を採用しなければなりません。でないと文字化現象が発生します。そこで国際標準化機構ISOは、世界中の文字と記号を入れる文字コードのUnicodeを制定しました。Unicodeは1つの文字セットで、人間のすべての文字に対応する2進数を規定しています。この2進数はどのように記憶するかは開発者によって実現されます。その中で流行しているのはUTF-8とUTF-16で、もう一つのUTF-32です。
UTF-32符号化は4バイト、つまり32ビットのバイナリ記憶ユニット文字を使用しています。効率は高いですが、スペースがもったいないです。
UTF-8符号化は、1~6バイトを使って記憶し、英語系の文字に対しては1バイトを使い、ASCIIに対応しており、漢字に対しては2バイトを使い、順次類推することで一定の空間を節約することができます。
UTF−16符号化は、両者の間の符号化方式である。一部の文字には2バイトを採用し、他の部分の文字には4バイトを採用します。このため、UTF-16はASCIIと互換できません。
通常の使用では、UTF-8の使用が多いのは、ASCIIとの互換性があり、ある程度の省スペース化ができるからです。
2.3、Java_IOストリームにおける符号化と復号
Javaではどのようにコーディングと復号を行いますか?符号化/復号化のプロセスは主に文字とバイトの間で行われる変換のプロセスであることを知っている。文字を展示する時、私達はメモリの中のバイトを記号に復号して、ファイルを記憶しますかます伝送する時、私達は文字をビットのバイトのデータをエンコードします。復号
復号のプロセスは、バイトを文字に変換する、つまりファイルまたはネットワークデータを読み取るプロセスである。
javaでは、FileReaderを通じてファイルデータを読み取り、FileReaderはInputStreamReaderから引き継ぎます。InputStream ReaderにはデコーダStreamDecoderが使用されている。
入力ストリームを読み出す場合、StreamDecoderによってバイトから文字への変換が完了します。構成方法によって、符号化方式で読み取られた文字をint型データで返すことができます。つまり、4バイトです。
また、上記の列挙はソースコードの一部にすぎません。構成方法では、例えば、入力符号化方式のStringタイプの名称、着信CharSetタイプの文字セット、および上述のCheretDecoderタイプの文字復号方式など、様々な形式があります。符号化スキームが入ってこない場合、デフォルトは現在の環境の符号化スキームです。コーディング
復号と同様に、ファイルを格納したり、データを書き込む際には、文字をバイトに変換してファイルやネットワークに書き込みます。
java種では、FileWriterを通じてファイルに書き込み、FileWriterはOutput Stream Writerから引き継ぎます。OutputStream Writer種にはエンコーダStream Engcoderが使用されています。出力ストリームに書き込みを行うと、Stream Encersにより文字のバイトへの変換が完了します。 .構成方法により符号化方式を指定する 。書き込みの文字はすべてintタイプ です。
ここでは、JAVAのバイトと文字の違いについての文章を紹介します。JAVAバイトと文字の内容については、以前の文章を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。
バイト
バイト(Byte)とは、コンピュータデータストアの計測単位です。1つのバイナリビットはビット(bit)と呼ばれ、8ビットは1バイトを構成し、つまり1バイトは256個の整数(0〜255)を区別するために使用できます。これにより、バイトはコンピュータデータストアおよび転送の基本単位であり、後続の文字はバイト単位で記憶されており、異なる符号化された文字の占有バイト数が異なることが分かる。
Javaでは、格納の意味に加えて、JavaはバイトByteを1つの基本データタイプとして、メモリ内にバイトを占有し、(−128〜127)範囲内の整数に使用する。
byte a = -128;
byte b = 127;
総じて、バイトはJavaに2つの意味があります。格納された単位Javaのデータタイプは、-128~127の範囲の整数を表すために使用されます。
二、文字
計算機の下にはバイトが格納されています。文字のデザインは記号を示すためのものです。画面に表示される各種の文字、数字、記号などは復号された文字です。したがって、文字は表示のための記号であり、記憶されているバイトを分かりやすい記号に変換するので、文字の核心はバイトと展示記号との関係を定義することであり、このマッピング関係は符号化と呼ばれることが多い。
2.1、コードの由来
なぜコードしますか?前に、データはすべてバイト単位でコンピュータに格納されていることが分かりました。バイトは256個の整数を区別できます。最も考えやすいのは、256個の整数を256個の状態と定義し、それぞれ256個の文字に対応しています。でも、人間の記号が多すぎて、256種類は足りません。複数のバイトを統合して人間の言語記号を表すと考えられています。符号化の問題はバイトの組み合わせになります。
2.2、符号化の一般的なフォーマット
今は多くのコードフォーマットがあります。ASCII、ISO-859-1、GB 2312、GBK、UTF-8、UTF-16などがあります。
ASCIIコードは最も基本的なコードフォーマットで、標準のASCIIコードは全部で128個あり、バイトの低い7桁を占めています。英語系言語の記号を全部カバーできますが、全体的には表現できる文字はまだ非常に限られています。
ISO-859-1符号化はASCII符号化の一種の拡張であり、バイトの8ビットを使って256種類の文字を表し、そして下向きのASCIIに対応し、圧倒的多数の西欧記号を含んでいます。
GB 2312は2バイトの符号化であり、2バイトを使って記号を表し、6763文字が含まれている。
GBKはGB 2312の拡張であり、バイトコードでもあり、漢字2103個を表し、GB 2312を下向きにすることができる。
…
コードの仕様はますます多くなりました。異なる言語の国では自分の言語記号コード基準を定義しています。一時的にコード化基準が百花斉放で、インターネットの時代ではコミュニケーションが非常に不便で、異なった符号化システムの間の情報交流はすべて異なった復号方式を採用しなければなりません。でないと文字化現象が発生します。そこで国際標準化機構ISOは、世界中の文字と記号を入れる文字コードのUnicodeを制定しました。Unicodeは1つの文字セットで、人間のすべての文字に対応する2進数を規定しています。この2進数はどのように記憶するかは開発者によって実現されます。その中で流行しているのはUTF-8とUTF-16で、もう一つのUTF-32です。
UTF-32符号化は4バイト、つまり32ビットのバイナリ記憶ユニット文字を使用しています。効率は高いですが、スペースがもったいないです。
UTF-8符号化は、1~6バイトを使って記憶し、英語系の文字に対しては1バイトを使い、ASCIIに対応しており、漢字に対しては2バイトを使い、順次類推することで一定の空間を節約することができます。
UTF−16符号化は、両者の間の符号化方式である。一部の文字には2バイトを採用し、他の部分の文字には4バイトを採用します。このため、UTF-16はASCIIと互換できません。
通常の使用では、UTF-8の使用が多いのは、ASCIIとの互換性があり、ある程度の省スペース化ができるからです。
2.3、Java_IOストリームにおける符号化と復号
Javaではどのようにコーディングと復号を行いますか?符号化/復号化のプロセスは主に文字とバイトの間で行われる変換のプロセスであることを知っている。文字を展示する時、私達はメモリの中のバイトを記号に復号して、ファイルを記憶しますかます伝送する時、私達は文字をビットのバイトのデータをエンコードします。復号
復号のプロセスは、バイトを文字に変換する、つまりファイルまたはネットワークデータを読み取るプロセスである。
javaでは、FileReaderを通じてファイルデータを読み取り、FileReaderはInputStreamReaderから引き継ぎます。InputStream ReaderにはデコーダStreamDecoderが使用されている。
// InputStreamReader.java
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import sun.nio.cs.StreamDecoder;
public class InputStreamReader extends Reader {
// ,
private final StreamDecoder sd;
// dec
public InputStreamReader(InputStream in, CharsetDecoder dec){
super(in);
if (dec == null)
throw new NullPointerException("charset decoder");
sd = StreamDecoder.forInputStreamReader(in, this, dec);
}
// , int (4 )
public int read() throws IOException {
return sd.read();
}
}
上記のInputStream Readerのソースコードを通じて知ることができます。入力ストリームを読み出す場合、StreamDecoderによってバイトから文字への変換が完了します。構成方法によって、符号化方式で読み取られた文字をint型データで返すことができます。つまり、4バイトです。
また、上記の列挙はソースコードの一部にすぎません。構成方法では、例えば、入力符号化方式のStringタイプの名称、着信CharSetタイプの文字セット、および上述のCheretDecoderタイプの文字復号方式など、様々な形式があります。符号化スキームが入ってこない場合、デフォルトは現在の環境の符号化スキームです。コーディング
復号と同様に、ファイルを格納したり、データを書き込む際には、文字をバイトに変換してファイルやネットワークに書き込みます。
java種では、FileWriterを通じてファイルに書き込み、FileWriterはOutput Stream Writerから引き継ぎます。OutputStream Writer種にはエンコーダStream Engcoderが使用されています。
// OutputStreamWriter.java
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import sun.nio.cs.StreamEncoder;
public class OutputStreamWriter extends Writer {
// ,
private final StreamEncoder se;
// enc
public OutputStreamWriter(OutputStream out, CharsetEncoder enc) {
super(out);
if (enc == null)
throw new NullPointerException("charset encoder");
se = StreamEncoder.forOutputStreamWriter(out, this, enc);
}
// , int
public void write(int c) throws IOException {
se.write(c);
}
ソースコードを通して知ることができます。ここでは、JAVAのバイトと文字の違いについての文章を紹介します。JAVAバイトと文字の内容については、以前の文章を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。