IOは、文字ストリームのストリーム

文字ストリーム

    (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();

    }

}

 

公開された114元の記事 ウォン称賛52 ビュー20000 +

おすすめ

転載: blog.csdn.net/Smile_Sunny521/article/details/89703926