2024年大数据最新【Java基础】IO流(二)_printwriter自带多大缓冲区吗,面试题解析已整理成文档

本文详细介绍了Java后端开发中字符流(Reader,Writer)、缓冲流(包括字节和字符缓冲)、转换流处理编码问题、序列化与打印流,以及提供了一份全面的大数据学习资料,强调体系化学习的重要性,以助于提升技术能力。
摘要由CSDN通过智能技术生成

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

🏆学习方向:JAVA后端开发 
📣种一棵树最好的时间是十年前,其次是现在!
⏰往期文章:【Java基础】File类 IO流
🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。

目录

1. 字符流

1.1 字符输入流Reader

1.2 字符输出流Writer

2. 缓冲流

2.1 缓冲流概述、字节缓冲流的使用

2.2 字节缓冲流的性能分析

2.3 字符缓冲流

3. 转换流

3.1 不同编码读取乱码问题

3.2 字符输入转换流

3.3 字符输出转换流

4. 序列化对象

4.1 对象序列化

4.2 对象反序列化

5. 打印流

5.1 PrintStream、PrintWriter

5.2 输出语句的重定向

6. 补充知识: Proparties

6.1 Properties的作用

7. 补充知识: IO框架

7.1 commons-io概述

7.2 FileUtils主要有如下方法

1. 字符流

1.1 字符输入流Reader

Reader–抽象父类–不能实例化

FileReader–文件字符输入流-FR

BufferedReader–高效字符输入流-BR

FR in = new FR(new File(路径));
    FR in = new FR(路径);
    BR in = new BR(new FR(new File(路径)))
    BR in = new BR(new FR(路径));

1.2 字符输出流Writer

Writer–抽象父类,不能实例化

FileWriter–文件字符输出流–FW

BufferedWriter–高效字符输出流–BW

FW out = new FW(File/File,append/String pathname/String pathname,append);
    BW out = new BW(Writer–所以传的是子类FW(上面那4种));
    注意:这里的append参数表示流向文件输出数据的时候是追加还是覆盖,如果不写,默认false是覆盖,如果改为true,表示追加

2. 缓冲流

2.1 缓冲流概述、字节缓冲流的使用

2.1.1 缓冲流概述

缓冲流也称为高效流、或者高级流。之前学习的字节流可以称为原始流。

作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能

2.1.2 字节缓冲流性能优化原理:

字节缓冲输入流自带了8KB缓冲池,以后我们直接从缓冲池读取数据,所以性能较好。                 字节缓冲输出流自带了8KB缓冲池,数据就直接写入到缓冲池中去,写数据性能极高了。

2.1.3 字节缓冲流

字节缓冲输入流:BufferedInputStream,提高字节输入流读取数据的性能。

字节缓冲输出流:BufferedOutputStream,提高字节输出流读取数据的性能。

2.1.4 缓冲流有几种?

字节缓冲流 字节缓冲输入流: BufferedInputStream

字节缓冲输出流:BufferedOutputStream

字符缓冲流 字符缓冲输入流:BufferedReader

字符缓冲输出流:BufferedWriter

2.1.5 字节缓冲流为什么提高了操作数据的性能?

字节缓冲流自带8KB缓冲区

可以提高原始字节流、字符流读写数据的性能

2.1.6 字节缓冲流的功能如何调用?

public BufferedOutputStream​(OutputStream os)

public BufferedInputStream​(InputStream is)

功能上并无很大变化,性能提升了。

2.2 字节缓冲流的性能分析

2.2.1 如何测试字节缓冲流的读写性能?

需求

分别使用低级字节流和高级字节缓冲流拷贝大视频,记录耗时。

分析

使用低级的字节流按照一个一个字节的形式复制文件。

使用低级的字节流按照一个一个字节数组的形式复制文件。

使用高级的缓冲字节流按照一个一个字节的形式复制文件。

使用高级的缓冲字节流按照一个一个字节数组的形式复制文件。

/**
     * 使用高级的缓冲字节流按照一个一个字节数组的形式复制文件
     */
    private static void copy(){
        long startTime = System.currentTimeMillis();
        try(
                //这里只能放置资源对象,用完会自动关闭,自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作)
                //1.创建一个字节输入流管道与原图片接通
                InputStream is =new FileInputStream(SRC_FILE);
                //a.把原始的字节输入流包装成高级的缓冲字节输入流
                InputStream bis =new BufferedInputStream(is);
                //2.创建一个字节输出流`管道与目标图片接通
                OutputStream os =new FileOutputStream(DEST_FILE+"video4.mp4");
                //b.把字节输出流管道包装成高级的缓冲字节输出流管道
                OutputStream bos =new BufferedOutputStream(os);
                ) {
            //3.定义一个字节数组转移数据
            byte[] buffer = new byte[1024];
            int len;//记录每次读取的字节数
            while ((len = bis.read(buffer)) != -1 ){
                bos.write(buffer,0,len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis();
        System.out.println("使用缓冲的字节流按照一个一个字节数组的形式复制文件耗时:"+(endTime - startTime)/1000.0+"s");
    }

2.2.2  推荐使用哪种方式提高字节流读写数据的性能?

建议使用字节缓冲输入流、字节缓冲输出流,结合字节数组的方式,目前来看是性能最优的组合。

2.3 字符缓冲流

2.3.1 字符缓冲流为什么提高了操作数据的性能?

字符缓冲流自带8K缓冲区

可以提高原始字符流读写数据的性能

2.3.2 字符缓冲流的功能如何使用?

public BufferedReader​(Reader r)

性能提升了,多了readLine()按照行读取的功能

public BufferedWriter​(Writer w)

性能提升了,多了newLine()换行的功能

3. 转换流

3.1 不同编码读取乱码问题

3.1.1 之前我们使用字符流读取中文是否有乱码?

没有的,因为代码编码和文件编码都是UTF-8。

3.1.2 如果代码编码和文件编码不一致,使用字符流直接读取还能不乱码吗?

会乱码。

文件编码和读取的编码必须一致才不会乱码。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-ZBoOCgtk-1714882142614)]
[外链图片转存中…(img-OYFsm0Kz-1714882142614)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值