IO流之字符流

为什么会出现字符流:字符流介绍,由于字节流擦做中文不是特别方便,所有java就提供字符流:

字符流 = 字节流 + 编码表

中文的字节 存储方式:

用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼接成中文,如何识别是中文的了?

汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数。

编码表:

什么是字符集:是一个系统支持的所有字符的集合,包括各国际文字,标点符号,图形符号,数字等

计算机要准确的存储和识别各种字符集符号,就需要进行字符编码,一套字符集必然至少有一套字符编码,常见的字符集有ASCII字符集,GBXXX字符集,Unicode字符集等

字符中的编码解码问题:

相关方法;

  public static void main(String[] args) throws Exception, UnknownHostException {
        //编码
        String s  = "苏小小";
        byte[] gbks = s.getBytes(StandardCharsets.UTF_8);
        System.out.println(Arrays.toString(gbks));
    }

解码:

byte[] gbkBytes = {-24, -117, -113, -27, -80, -113, -27, -80, -113};
        String str = new String(gbkBytes, "UTF-8");
        System.out.println(str);

字符流中的编码和解码问题:

字符流中和编码解码问题相关的两个类:

InputStreamReaer:是从字节流到字符流的桥梁

它读取字节,并使用指定的编码将其解码为字符。

它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

OutputStreamWriter:是从字符流到字节流的桥梁

是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节

它使用的字符集可以又名称指定,也可以被明确指定,或者可以接受平台的默认自妒忌

构造方法:

 我们来用代码

  public static void main(String[] args) throws Exception, UnknownHostException {
        OutputStreamWriter osw = new  OutputStreamWriter(new FileOutputStream("D:\\suxiaoxiao\\sisi.txt"), StandardCharsets.UTF_8);
        osw.write("李思思");
        osw.close();
        InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\suxiaoxiao\\sisi.txt"),StandardCharsets.UTF_8);
        char[] chs = new char[1024];
        int ch;
        while ((ch=isr.read(chs))!=-1) {
            System.out.print(new String(chs,0,ch));
        }
        isr.close();
    }

字符流写数据的几种方式:

 字符流读数据的两种方式:

字符缓冲流:

字符缓冲流介绍:

BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。

BufferReader:从字符输入流读取文本,缓冲字符,已提供字符,数组和行的高校读取,可以指定缓冲区大小,或者可以使用默认大小。

我们来用代码演示下:

  public static void main(String[] args) throws Exception, UnknownHostException {
      BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\suxiaoxiao\\sisi.txt"));
        bw.write("苏小小");
        bw.write("是个大美女");
        bw.close();
        BufferedReader br = new BufferedReader(new FileReader("D:\\suxiaoxiao\\sisi.txt"));
        //一次读取一个字符数组数据
        char[] chs = new char[1024];
        int len;
        while((len = br.read(chs)) != -1){
            System.out.print(new String(chs,0,len));
        }
        br.close();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值