字节流与字符流

b站 Java教程 https://www.bilibili.com/video/BV18J411W7cE?p=288

1 字节缓冲流

  • BufferedOutputStream:缓冲输出流,通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
  • BufferedInputStream:为另一个输入流添加了功能,即缓冲输入并支持mark和reset方法的功能。创建BufferedInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。mark操作会记住输入流中的一个点,并且reset操作会导致从最近的mark操作读取的所有字节在从包含的输入流中取出新字节之前重新读取。
  • import java.io.*;
    
    public class FileOutputStreamDemo {
        public static void main(String[] args) throws IOException {
            //写数据
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("idea_test\\fos.txt"));
            bos.write("hello\r\n".getBytes());
            bos.write("world\r\n".getBytes());
            bos.close();
            //读数据
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream("idea_test\\fos.txt"));
    //        int by;
    //        while((by = bis.read())!= -1){
    //            System.out.print((char)by);
    //        }
            int len;
            byte[] bys = new byte[1024];
            while((len = bis.read(bys)) != -1){
                System.out.print(new String(bys,0,len));
            }
            bis.close();
        }
    }

2 字符流

  • 为什么会出现字符流:
    • 一个汉字存储,如果是GBK编码,占用2个字节;如果是UTF-8编码,占用三个字节
  • 编码表
  • 字符流抽象基类
    • Reader:字符输入流的抽象类
    • Writer:字符输出流的抽象类
  • 与编码解码相关的字符流类
    • InputStreamReader:是从字节流到字符流的桥梁,它读取字节,并使用指定的charset将其解码为字符。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
    • OutputStreamWriter:是从字符流到字节流的桥梁,使用指定的charset将写入的字符编码为字节。它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

3 字符流读写数据的方式

  • 写数据
  • 流在关闭之前会先刷新
  • 读数据
  • InputStreamReader 的子类 FileReader,是读取字符文件的便捷类
  • OutputStreamWriter的子类FileWriter,是写字符文件的便捷类
  • 但是如果涉及到编码解码问题,还是得用转换流、

4 字符缓冲流

  • BufferedReader(Reader in):从字符输入流读取文本,缓冲字符,以提供字符、数组和行的高效读取;可以指定缓冲区大小,或者可以用默认大小。默认值足够大,可用于大多数用途
  • BufferedWriter(Writer out):将文本写入字符输出流,缓冲字符,以提供单个字符、数组和字符串的高效写入;可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途
  • 特有功能
    • readLine()读到的内容不包括换行符
    • 字符缓冲流复制文件

5 IO流小结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值