Java之字符流相关知识

字符流

1、说明

除了字符流,JDK还提供了用于实现字符操作的字符流,同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader 和 Writer。
(用字节流输出中文,可能会出现中文乱码问题,所以这时候便要利用到字符流)

2、相关代码

public class Demo1{
    public static void main(String[] args) throws IOException{

        FileInputStream fis = new FileInputStream("b.txt");

        byte[] bys = new byte[2];

        int i;

        while((i=fis.read(bys))!=-1){
            System.out.println(new String(bys,0,i));
        }

        fis.close();
    }
}


3、字符流操作文件

3.1 字符流的作用

操作纯文本文件的时候,可以解决中文乱码问题。
(注意:字符流只能操作纯文本文件)

3.2 解决中文乱码的方式

字符流底层实际上是通过(字节流+编码表)的形式进行读取的,在读取之后,会根据平台默认码表决定一次读取多少个字节,并在内存中转换为字符。

GBK ——> 一个中文占2个字节
UTF-8 ——> 一个中文占3个字节

3.3 判断标准

字符流底层有一个判断,
如果读取到的是中文字符,一次读取2个字节(GBK),
如果读取到的是非中文字符,一次读取1个字节,
其中中文字符一般都是负数的字节,部分是第一个字节为负数,后面的字节有可能为正数,
非中文字符都是正数。

3.4 FileWriter ——> 字符输出流

3.4.1 注意

如果字符输出流没有调用close方法、flush方法的话,数据将不会写出到文件中

3.4.2 flush和close方法的区别

(1)flush方法是将数据刷出到文件中去,刷出后可以继续调用write方法写出
(2)close方法的主要功能是关闭流释放资源,同时也具有刷出数据的效果
(3)close方法调用结束后,不能再调用write方法写出数据

3.4.3 相关代码
public static void main(String[] args) throws IOException{
    FileWrite fw = new FileWriter("c.txt");
    //1.写出一个字符
    fw.write('a');
    //2.写出一个字符数组
    char[] cbs = {'1','2','3','4'};
    //3.写出一个字符数组的一部分
    fw.write(cbs,0,2);
    //4.写出一个字符串
    fw.write("你好你好");
    //5.写出字符串的一部分
    fw.write("你好你好",0,1);

    fw.close();

}

4、字符缓冲流

BufferedInputStream
BufferedOutputStream

BufferedReader
readLine() -> 一次读取一整行字符串,同时结束标记是null,不会读取到回车换行符
BufferedWriter
newLine() -> 写出回车换行,但是此方法具有跨平台效果

public static void main(String[] args) throws IOException{
    BufferedReader br = new BufferedReader(new FileReader("a.txt"));
    BufferedWriter br = new BufferedWriter(new FileWriter("bufferCopy.txt"));

    String line;

    while((line = br.readLine())!=null){
        bw.write(line);

    }
    br.close();
    bw.close();

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊凯瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值