文字ストリーム
(1)動作バイトストリームデータは、中国の特に便利ではないので、変換後の流れがありました。
役割は、使用する文字のストリームにバイトストリームの流れを変換することです。
(2)ストリームを変換する実際の文字列であります
= +文字ストリームのコードテーブルバイトストリーム
(3)コードテーブル
A:文字に対応する数値とからなるテーブルであります
B:一般的なコーディングテーブル
ASCII
ISO-8859-1
GB2312
GBK
GB18030
UTF-8
C:コーディングの問題文字列
コード:読んでいない理解できるようになるために
文字列 - バイト[]
デコード:理解できるに読み込むことができません
バイト[] - 文字列
/*
* String(byte[] bytes, String charsetName):通过指定的字符集解码字节数组
* byte[] getBytes(String charsetName):使用指定的字符集合把字符串编码为字节数组
*
* 编码:把看得懂的变成看不懂的
* String -- byte[]
*
* 解码:把看不懂的变成看得懂的
* byte[] -- String
*
* 要发送一段文字:
* 今天晚上在老地方见
*
* 发送端:今 -- 数值 -- 二进制 -- 发出去
* 接收端:接收 -- 二进制 -- 十进制 -- 数值 -- 字符 -- 今
*
* 今天晚上在老地方见
*/
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "你好";
//String-byte[]
byte[] bys = s.getBytes(); // [-60, -29, -70, -61]
System.out.println(Arrays.toString(bys));
// byte[] -- String
String ss = new String(bys); // 你好
System.out.println(ss);
}
}
(4)IO問題とストリームの符号化方式
A:のOutputStreamWriter
OutputStreamWriter(OutputStreamのOS):GBKは、データ文字列変換デフォルトのエンコーディングは、バイトのストリームであります
OutputStreamWriter(OutputStreamのOS、ストリングたcharsetName):指定された符号化に従って。データ文字列を変換すると、バイトのストリームであります
方法:
公共のボイドの書き込み(INT C):文字の書き込み
公共のボイドの書き込み(文字[] CBUF):文字の配列を書きます
文字配列を書くのパートます。public void書き込み(文字[] CBUF、オフint型、int型のLEN)
公共のボイドの書き込み(String str)文字:文字列を書きます
文字列の書き込み一部ます。public void書き込み(文字列strは、int型のlen、オフINT)
インタビューの質問:クローズ()とフラッシュの間の差()ですか?
A:クローズ()ストリーム・オブジェクトをクローズするが、第1のリフレッシュバッファ。閉じた後、流れは再び使用され続けてはいけません。
B:フラッシュ()のみのリフレッシュ後にバッファをフラッシュし、ストリームオブジェクトは引き続き使用することができます。
B:にInputStreamReader
InputStreamReaderの(のInputStreamがある):デフォルトのエンコード、GBK
InputStreamReaderの(入力ストリームは、文字列たcharsetNameある)エンコーディングを指定
方法:
int)が(読み:1つの文字を読み込み、
int型の読み取り(文字[] CHSは):1つの文字配列を読み込み
C:コーディングの問題は非常に簡単です
限り、あなたは同じことをエンコードすることができるよう
(5)文字ストリーム
読者
| --InputStreamReader
| --FileReader
| --BufferedReader
パブリック文字列のreadLine():データの行を読み取る:任意の行終端を含まない行の内容を含む文字列を、ストリームの最後である場合
ヌル
ライター
| --OutputStreamWriter
| --FileWriter
| --BufferedWriter
公共空改行():システムは改行を決定
(6)は、テキストファイルをコピーします。
/*
* 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中
*
* 数据源:
* a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader -- BufferedReader
* 目的地:
* b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter -- BufferedWriter
*/
public class CopyFileDemo2 {
public static void main(String[] args) throws IOException {
// 封装数据源
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
// 封装目的地
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
// 方式1:一次读写一个字符数组
//char[] chs = new char[1024];
//int len = 0;
//while ((len = br.read(chs)) != -1) {
//bw.write(chs, 0, len);
//bw.flush();
//}
//方式2:一次读取一行数据
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
// 释放资源
bw.close();
br.close();
}
}