字符集(ASCII,GBK,Unicode)

本文详细介绍了Java中字符流的编码与解码,包括使用`getBytes()`方法、`newString()`方法以及FileReader的read方法和FileWriter的write方法。重点讲解了处理中文字符时的一次性读取多个字节并解码的过程。
摘要由CSDN通过智能技术生成

一、编码和解码:

图片来自哔站黑马程序员

代码演示:

package a02charstreamdemo;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class charStreamDemo1 {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //1.编码
        String str="ai你哟";
        //注意:idea默认的是UTF-8:一个英文一个字节,一个中文3个字节
        //如果用的是eclipse默认的是jbk:一个英文一个字节,一个中文2个字节
        byte[] bytes1 = str.getBytes();
        System.out.println(Arrays.toString(bytes1));//[97, 105, -28, -67, -96, -27, -109, -97]

        byte[] bytes2 = str.getBytes("GBK");//GBK大写小写都可以
        System.out.println(Arrays.toString(bytes2));//[97, 105, -60, -29, -45, -76]

        //2.解码
        String str2=new String(bytes1);
        System.out.println(str2);
        String str3=new String(bytes1,"GBK");
        System.out.println(str3);
    }
}

运行结果:

二、FileReader读取文件:

方法:

public int read()--------->读取数据,读到末尾返回-1

public int read(char[] buffer)--------->读取多个数据,读到末尾返回 -1

细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数

细节2:读到文件末尾了,read方法返回-1

利用空参read方法读取数据代码演示:
     package a02charstreamdemo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class charStreamDemo2 {
    public static void main(String[] args) throws IOException {
        //1.创建对象并关联本地文件
        FileReader fr=new FileReader("Test\\a.txt");
        //2.读取数据 read()
        //细节:read()默认也是一个字节一个字节读取的,如果遇到中文就会一次读取多个
        //在读取之后,方法的底层还会进行解码并转成十进制,最终把这个十进制作为返回值
        //这个十进制的数据也表示在字符集是那个的数字
        //英文:文件里面二进制数据 01100001
        //     read方法进行读取,解码并转成十进制97
        //中文:文件里面二进制数据 11100110 10110001 10001001
        //     read方法进行读取,解码并转成十进制27721
        //如果想看到中文汉字,就是把这些十进制数据,再进行强转就可以了
        int ch;
        while((ch=fr.read())!=-1){
            System.out.print((char)ch);
        }
        fr.close();
    }
}

运行结果:

 

带参读取代码演示:
package a02charstreamdemo;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class charStreamDemo3 {
    public static void main(String[] args) throws IOException {
       //1.创建对象并关联本地文件
        FileReader fr=new FileReader("Test\\a.txt");
        //2.读取数据
        char[] chars=new char[2];
        int len;
        //read(chars)读取数据、解码、强转三步合并了,把强转之后的字符放到数组当中
        //空参的read方法+强制类型转换
        while ((len=fr.read(chars))!=-1){
            //把数组中的数据变成字符串在进行打印
            System.out.print(new String(chars,0,len));
        }
        fr.close();
    }
}

运行结果:

 

三、FileWrite写出数据

1.FileWriter构造方法

2.FileWriter成员方法:

FileWriter书写细节:

①创建字符输出流对象

细节1:参数是字符串表示的路径或者File对象都是可以的

细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的

细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关

②写数据

细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符

③释放资源

代码演示:

package a02charstreamdemo;

import java.io.FileWriter;
import java.io.IOException;

public class charStreamDemo4 {
    public static void main(String[] args) throws IOException {
        FileWriter fw=new FileWriter("Test\\a.txt",true);
        char[] chars={'a','b','c','d','我'};
        // fw.write("鹿晗真帅!!!");
        fw.write(chars);

        fw.close();
    }
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值