java流

IO流

  1. 字符流:适用文本的读写。字符输出流:必须使用 刷新或关闭操作;缓冲区满自动刷新;
  2. 字节流:适合文本数据转移:(如一切文件/视频/图像的复制。P19视频最后我是这样认为的把这个文本输出后不乱码,肯定还有个东西把所有字节数组连起来的东西);
  3. 缓冲流:对原始流包装,提高读写性能,自带8K 字节/字符缓冲池于内存。new BufferInputStream(new FileInput()),特殊BufferReader有方法readLine()
  4. 字符转换流:解决乱码问题:new InputStreamReader(原始流,字符集)
  5. 打印流:写什么就输出什么,不会进行字符==对应字符序号,2者转换的情况 。PrintStream/PrintWriter。把sout代码输出到文件:System.setOut(new PrintStream())
  6. 数据流:把数据带着类型。通信时用。new DataOutputStream(原始流)。输入时必须按输出的数据类型顺序进行。
  7. 序列化流:把Java对象的序列化成文件与反序列化。new ObjectOutputStream(原始流).writeObject.(对象)。某个类需要被序列化,必须实现Serializable接口。成员属性如果不想被序列化,使用transient定义,再次反序列时也不在拥有该属性。

1.认识IO流

IO流分为:输入流和输出流。
作用:读写数据的。
在这里插入图片描述

2.IO流的应用场景

在这里插入图片描述

3.怎么学习IO流?

先搞清io体系和分类,再逐一学习每个IO流作用和用法,这样整个思路会非常的清晰。而不是一会学这个一会学学那个。
在这里插入图片描述

IO流分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

IO流体系

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

FileInputStream

常用api

在这里插入图片描述

案例代码应用

在这里插入图片描述

代码优化1

存在问题一:如果文件数据很大,则需要写很多read()调用,使用while循环遍历。
在这里插入图片描述

代码优化2

存在问题:
1.读取数据的性能很差!
每次调用read()只读取1个字节,每次调用都会通过系统调用从磁盘读取,导致系统性能很差。
2.读取汉字输出会乱码!!无法避免的!!
由于read()每次读取一个字节,如果文件含有中文则会出现中文乱码(UTF-8中文占用三个字节)
3.流使用完毕之后,必须关闭!释放系统资源!
因为FileInputStream流一直通过系统资源关联着文件,一方面一直占用系统资源,另一方面占用着文件。

小结

代码优化三:

在这里插入图片描述
虽然只有文件只有5个字节,但第二次读取2个字节,但打印字符串确是三个字节。

在这里插入图片描述
使用 new String(buffer,offset:0,Len2); 读取多少,倒出多少。

代码优化四:

使用循环改造:
在这里插入图片描述

代码优化5

性能得到了明显的提升!!
存在问题:这种方案也不能避免读取汉字输击乱码的问题!

虽然这种操作存在问题,但很多场景都会有应用,做流的传输、文件拷贝等!
在这里插入图片描述

小结

在这里插入图片描述

优化6

一次读取全部字节,适用于文件不是太大的场景。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

FileOutputStream

在这里插入图片描述

常用api

在这里插入图片描述

案例代码

在这里插入图片描述

代码优化1

存在问题:os.write(‘磊’)会出现乱码。
使用byte数组,一次写多个字节。byte[]bytes=“我爱你中国abc”,getBytes();
在这里插入图片描述
写部分字节
在这里插入图片描述

案例代码

在这里插入图片描述

案例代码

在这里插入图片描述

小结

在这里插入图片描述

复制图片案例应用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

释放资源的方式

方式一:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
方式二:
自动释放资源
在这里插入图片描述
验证
在这里插入图片描述

小结

在这里插入图片描述

IO字符流

FileReader和FileWriter
在这里插入图片描述

FileReader

字节流:适合复制文件等,不适合读写文本文件。
存在问题:
1.可能出现中文乱码
2.文件太大,没有那么多字节数组
解决方案:
字符流:适合读写文本文件内容
在这里插入图片描述

api

在这里插入图片描述

案例代码

每次读取一个字符。在这里插入图片描述

优化1

每次读取多个字符,减少系统调用,提升性能,

在这里插入图片描述

小结

在这里插入图片描述

FileWriter

在这里插入图片描述

api

在这里插入图片描述

案例代码

写一个字符。
在这里插入图片描述
写一个字符串。
在这里插入图片描述
写一个字符数组。
在这里插入图片描述
追加数据管道。
在这里插入图片描述

注意事项

在这里插入图片描述

在这里插入图片描述
因为字符输出流每次先写到缓冲区里面,优化减少了系统的调用次数,直到刷新缓冲区或者缓冲区满自动写或者关闭流。
在这里插入图片描述

小结

在这里插入图片描述

IO流-缓冲流

作用:对原始流#行包装,以提高原始流读写数据的性能
在这里插入图片描述

字节缓冲流

原理

没有缓冲流:32次系统调用
有缓冲流:4次系统调用
在这里插入图片描述

api

在这里插入图片描述

案例代码

在这里插入图片描述

小结

字符缓冲流-BufferedReader

api

在这里插入图片描述

代码案例

在这里插入图片描述
使用br.readLine()每次读取一行
在这里插入图片描述

字符缓冲流-BufferedWriter

在这里插入图片描述

api

在这里插入图片描述

案例代码

在这里插入图片描述

小结

在这里插入图片描述

原始流、缓冲流性能分析

在这里插入图片描述
在这里插入图片描述

IO流-打印流

体系

在这里插入图片描述

作用

打印流:输出数据到文件,非常方便,可以取代输出流。
在这里插入图片描述

两者区别

在这里插入图片描述

PrintStream

api

在这里插入图片描述

案例代码

在这里插入图片描述
指定编码:
在这里插入图片描述

源码分析

包装缓冲流,性能是高效的
在这里插入图片描述

PrintWriter

api

在这里插入图片描述

案例代码

不带追加功能,如果需要追加,包装低级流传参。
在这里插入图片描述

小结

在这里插入图片描述

打印流的应用

在这里插入图片描述
在这里插入图片描述

IO流-数据流

体系

在这里插入图片描述

DataOutputStream

在这里插入图片描述

案例代码

在这里插入图片描述
不是乱码,是数据一种存储方式,包含类型和数据,不是看的,是方便后续读数据和类型。
在这里插入图片描述

DataInputStream

api

在这里插入图片描述

api

在这里插入图片描述

小结

在这里插入图片描述

IO流-序列化流

体系

在这里插入图片描述

ObjectOutputStream

api

在这里插入图片描述

案例代码

对象必须实现序列化接口
在这里插入图片描述
不是乱码,是数据一种存储方式,不是方便我们看的,是方面下一次读出来。
在这里插入图片描述

ObjectInputStream

api

在这里插入图片描述
在这里插入图片描述

案例代码

在这里插入图片描述

如何实现多个对象序列化

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值