Rumah >Java >javaTutorial >Analisis contoh aliran aksara Java

Analisis contoh aliran aksara Java

王林
王林ke hadapan
2023-04-28 16:40:071123semak imbas

    1 Asal usul aliran aksara

    Memandangkan ia tidak begitu mudah untuk menggunakan aliran bait untuk mengawal bahasa Cina, Java menyediakan aliran aksara untuk mengawal bahasa Cina<.>

    Prinsip pelaksanaan: strim bait + jadual pengekodan

    Mengapa tiada masalah apabila menggunakan strim bait untuk menyalin fail teks dengan aksara Cina?

    Oleh kerana operasi asas akan menyambung bait secara automatik ke dalam bahasa Cina

    Bagaimana untuk mengenal pasti bahawa bait itu adalah bahasa Cina?

    Apabila aksara Cina disimpan, sama ada UTF-8 atau GBK, bait pertama ialah nombor negatif untuk digesa

    2. Jadual pengekodan

    Set aksara:

    ialah set semua aksara yang disokong oleh sistem, termasuk aksara kebangsaan, tanda baca, simbol grafik, nombor, dll.

    Untuk menyimpan dan mengenali pelbagai simbol set aksara dengan tepat, komputer perlu melakukan pemprosesan aksara Pengekodan, set aksara mesti mempunyai sekurang-kurangnya satu set pengekodan aksara

    Set aksara biasa termasuk set aksara ASCII, set aksara GBXXX, set aksara Unikod, dsb.

    GBK: jadual kod Cina yang paling biasa digunakan, Ia adalah spesifikasi lanjutan berdasarkan standard GB2312 Ia menggunakan skema pengekodan dua bait dan mengandungi sejumlah 21,003 aksara Cina Ia serasi sepenuhnya dengan standard GB2312 dan menyokong aksara Cina tradisional, Jepun dan aksara Cina Korea, dsb.

    GB18030: Bahasa Cina terkini Jadual kod mengandungi 70244 aksara Cina, menggunakan pengekodan berbilang bait Setiap aksara boleh terdiri daripada 1, 2 atau 4 bait. Menyokong watak etnik minoriti Cina, serta aksara tradisional Cina, aksara Jepun dan Korea Cina, dll.

    Set aksara Unikod:

    Direka untuk menyatakan sebarang aksara dalam mana-mana bahasa, ia adalah standard dalam industri, juga dikenali sebagai Ia adalah Unicode dan Standard Universal Code; ia menggunakan sehingga 4 bait nombor untuk menyatakan setiap huruf, simbol atau teks. Terdapat tiga skim pengekodan: UTF-8, UTF-16 dan UTF32 Yang paling biasa digunakan ialah UTF-8

    UTF-8: Ia boleh digunakan untuk mewakili mana-mana aksara dalam standard Unicode digunakan untuk e-mel, halaman web dan Pengekodan pilihan yang digunakan dalam aplikasi lain yang menyimpan atau memindahkan fail. Kumpulan Kerja Internet memerlukan semua protokol Internet mesti menyokong format pengekodan UTF-8. Ia menggunakan satu hingga empat bait untuk mengekod setiap aksara

    Peraturan pengekodan UTF-8:

    128 aksara AS-ASCII, hanya satu pengekodan bait diperlukan

    Cina Latin dan lain-lain aksara memerlukan dua bait untuk mengekod

    Kebanyakan aksara biasa (termasuk bahasa Cina) menggunakan tiga bait untuk mengekod

    Aksara tambahan UniCode lain yang jarang digunakan menggunakan empat aksara Pengekodan bahagian

    Ringkasan: Mana jenis peraturan digunakan semasa pengekodan, dan peraturan yang sepadan perlu digunakan untuk penyahkodan, jika tidak, kod akan bercelaru

    3. Isu pengekodan dan penyahkodan dalam rentetan

    Kaedah Pengekodan (IDEA) :

    bait[] getBytes(): Gunakan set aksara lalai platform untuk mengekod String ke dalam satu siri bait dan simpan hasilnya dalam tatasusunan bait baharu

    bait[] getBytes( String charsetName): Gunakan set aksara yang ditentukan untuk mengekod String ke dalam satu siri bait dan simpan hasilnya dalam tatasusunan bait baharu

    Kaedah penyahkodan (IDEA):

    String(bait[ ]bait): Membina String baharu dengan menyahkod tatasusunan bait yang ditentukan menggunakan set aksara lalai platform

    String(bait[]bait,String charsetName): Membina String baharu melalui set aksara yang ditentukan Nyahkod bait yang ditentukan tatasusunan untuk membina String baharu

    Format pengekodan lalai dalam IDEA ialah UTF-8

    4. Isu pengekodan dan penyahkodan strim aksara

    Abstraksi aliran aksara Kelas asas:

    Pembaca: kelas abstrak strim input aksara

    Penulis: kelas abstrak strim output aksara

    Dua kelas yang berkaitan dengan isu pengekodan dan penyahkodan dalam strim aksara:

    InputStreamReader: ialah jambatan daripada aliran bait ke aliran aksara: ia membaca bait dan menyahkodnya kepada aksara menggunakan set aksara yang ditentukan. Set aksara yang digunakannya boleh ditentukan mengikut nama, boleh dinyatakan secara eksplisit atau boleh menerima set aksara lalai platform

    Kaedah pembinaan:

    InputStreamReader(InputStream in)     创建一个使用默认字符集的InputStreamReader。
    InputStreamReader(InputStream in, String charsetName) 创建一个使用命名字符集的InputStreamReader。
    OutputStreamWruter: ialah aliran aksara daripada Throttling bridge: Mengekodkan aksara bertulis ke dalam bait menggunakan set aksara tersuai Set aksara yang digunakannya boleh ditentukan mengikut nama, boleh dinyatakan secara eksplisit atau boleh menerima set aksara lalai platform

    Kaedah pembinaan:

    <.>

    public class ConversionStreamDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的InputStreamReader\OutputStreamWriter
            InputStreamReader ipsr = new InputStreamReader(new FileInputStream("E:\\abc.txt"));
            OutputStreamWriter opsw = new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));
            //写入数据
            opsw.write("你好啊");
            opsw.close();
            //读数据,方式一:一次读取一个字节数据
            int ch;
            while ((ch = ipsr.read()) != -1) {
                System.out.print((char) ch);
            }
            ipsr.close();
    
        }
    }

    四、字符流写数据的五种方法

    方法名 说明
    void write(int c)     写一个字符
    void write(char[] cbuf) 写入一个字符数组
    void write(char[] cbuf,int off,int len) 写入字符数组的一部分
    void write(String str) 写入一个字符串
    void write(String str,int off,int len) 写入一个字符串的一部分

    字符流写数据需要注意缓冲区的问题,如果想要将缓冲区的数据加载出来需要在写入方法后加上刷新方法flush();

    前三个方法与字节流写入方法使用相同,这里重点介绍下面两种方式

    public class OutputStreamWriterDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的OutputStreamWriter对象
            OutputStreamWriter opsw=new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));
            //方式一:写入一个字节
            opsw.write(97);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式二:写入一个字符数组
            char[]ch={&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;二&#39;};
            opsw.write(ch);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式三:写入一个字符数组的一部分
            opsw.write(ch,0,2);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式四:写入一个字符串
            opsw.write("一二三");
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式五:写入一个字符串的一部分
            opsw.write("三四五",1,2);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
        }
    }

    五、字符流读数据的两种方法

    方法名 说明
    int read()     一次读取一个字符数据
    int read(char[] cbuf) 一次读取一个字符数组数据
    public class InputStreamReadDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的InputStreamReader
            InputStreamReader ipsr=new InputStreamReader(new FileInputStream("E:\\abc.txt"));
            //读取数据,方式一一次读取一个字符数据
            int ch;
            while ((ch=ipsr.read())!=-1){
                System.out.print((char) ch);
            }
            ipsr.close();
            //方式二:一次读取一个字符数组数据
            char []ch=new char[1024];
            int len;
            while ((len=ipsr.read(ch))!=-1){
                System.out.print(new String(ch,0,len));
            }
            ipsr.close();
        }
    }

    小结:如果使用默认编码格式的话,那么字符输入流InputStreamReader可以使用子类FileReader来替代,字符输出流OutputStreamWriter可以使用其子类FileWriter来替代,两者在使用默认编码格式的情况下作用一致。

    Atas ialah kandungan terperinci Analisis contoh aliran aksara Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam