Java IO流(三)

本文详细介绍了Java中的IO流,特别是转换流OutputStreamWriter和InputStreamReader,用于字符与字节流之间的转换。同时,重点讲解了缓冲流如BufferedInputStream和BufferedOutputStream在提高文件读写效率上的应用。通过实例展示了不同方式下复制文件的效率差异,并总结了IO流的使用规律,包括数据源和目的地的判断、数据类型、设备定位以及是否需要转换或高效功能。最后,提到了Java IO流的字节流和字符流的各类方法以及文件操作的基本步骤。
摘要由CSDN通过智能技术生成

转换流

        顾名思义,就是可以把字符与字节的流相互转换

OutputStreamWriter类

        OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去

/**
 * 字符转字节,并指定编码
 */
public static void test1() throws IOException {
    // 创建与文件关联的字节输出流对象
    FileOutputStream fos = new FileOutputStream("e:\\e.txt");
    // 创建可以把字符转成字节的转换流对象,并指定编码
    OutputStreamWriter osw = new OutputStreamWriter(fos, "utf-8");
    // 调用转换流,把文字写进去,其实是写到转换流的缓冲区中
    // 写入缓冲区
    osw.write("OutputStreamWriter 是字符流通向字节流的桥梁");
    // 关闭资源
    osw.close();
}

其实在OutputStreamWriter流中维护自己的缓冲区,当我们调用OutputStreamWriter对象的write方法时,会拿着字符到指定的码表中进行查询,把查到的字符编码值转成字节数存放到OutputStreamWriter缓冲区中。然后再调用刷新功能,或者关闭流,或者缓冲区存满后会把缓冲区中的字节数据使用字节流写到指定的文件中

InputStreamReader类

它使用指定的字符编码表读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集

/**
 * 字节转字符,并指定编码
 */
public static void test2() throws IOException {
    // 创建读取文件的字节流对象
    InputStream in = new FileInputStream("e:\\e.txt");
    // 创建转换流对象
    //InputStreamReader isr = new InputStreamReader(in);这样创建对象,会用本地默认码表读取,将会发生错误解码的错误
    InputStreamReader isr = new InputStreamReader(in, "utf-8");
    // 使用转换流去读字节流中的字节
    int ch = 0;
    while ((ch = isr.read()) != -1) {
        System.out.println((char)ch);
    }
    // 关闭资源
    isr.close();
}

        注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象

缓冲流

        读取数据量大的文件时,读取的速度会很慢,很影响我们程序的效率,那么,我想提高速度,怎么办? Java中提高了一套缓冲流,它的存在,可提高IO流的读写速度, 缓冲流,根据流的分类分类字节缓冲流与字符缓冲流

字节缓冲流

它们的内部都包含了一个缓冲区,通过缓冲区读写,就可以提高了IO流的读写速度

字节缓冲流根据流的方向,共有2个

  • 写入数据到流中,字节缓冲输出流 BufferedOutputStream

  • 读取流中的数据,字节缓冲输入流 BufferedInputStream

字节缓冲输出流 BufferedOutputStream

通过字节缓冲流,进行文件的读写操作 写数据到文件的操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值