day19-java

day19

一.IO流

1.I==>Input 输入  O==>输出  用于不通过设备进行信息交互
2.使用场景:
	A.文件的复制
	B.文件的上传和狭下载
	C.(即时通讯)微信的信息传递
3.IO分类:
	流向划分:输入流和输出流
	类型划分:字节流和字符流
4.字节流的解释:
	A.万物皆字节  系统上的任何资源都可以使用字节来进行表示
	B.一般读写文件 音视频 图片
	C.分类:字节输入流  字节输出流
5.字符流的解释:
	A.字符流=字节流+编码表 
		字符流的底层也是使用字节流来进行操作的,只能通过编码表来将字节转换成字符
	B.读取纯字符的文件
	C.分类:字符输入流  字符输出流
6.IO流的操作注意点:
	A.所有的流的资源都是java.io包下的
	B.使用流资源的时候,可能会产生异常,需要对异常进行处理(捕获 抛出)
	C.所有的流资源在使用完之后需要进行流关闭,因为流资源比较消耗内存 
		

在这里插入图片描述

二、OutputStream

1.此类是一个抽象类 是输出字节流的所有超类
2.常用的方法:
	public void close()  关闭流
	public void flush()  将缓冲区的东西刷新到硬盘里面
	public abstract void write(int b)  一个一个字节的写入
	public void write(byte[] b)   将字节数组的内容写入
	public void write(byte[] b, int off, int len)  将字节数组的指定长度的内容写入

三、FileOutputStream(文件输出流)

1.文件输出流是将数据写入Flie  将数据写入文件中
2.写入字符流,优先考虑FileWriter
3.构造方法:
	publicFileOutputStream(File file) 
		创建一个向指定 File 对象表示的文件中写入数据的文件输出流
	publicFileOutputStream(Stringname)
		创建一个向具有指定名称的文件中写入数据的输出文件流
		publicFileOutputStream(Stringname, boolean append)
			创建一个向具有指定 name 的文件中写入数据的输出文件流(为false则 文件头开始写入,为true 在文件内容末尾出开始写入)
4.构造方法的三件事:
	1.实例化FileOutputStream
	2.创建一个空文件
	3.将FileOutputStream指向这个空文件
5.使用步骤:
	A.实例化FileOutputStream
	B.调用它的方法
	C.关闭流
6.写入的原理:如下图:
	写入的内容说明:
	写入的字节:97 98 99  使用记事本打开时a b c
	原因:记事本打开文件的时候,如果字节的范围时0-127 使用ASCII码表来识别
			超出范围的会使用默认的编码表来识别  默认的时GBK
			

在这里插入图片描述

四、InputStream

1.此类是一个抽象类,表示为所有的字节输入流的超类
2.常用的方法:
	1.public void close()  关闭流资源
	2.public abstract int read()  一个一个字节的读取
	3.public int read(byte[] b) 	将读取的内容存入缓存区的数组里
	4.public int read(byte[] b, int off, int len)   将读取的指定的长度的内容存入缓冲区的数组来里

五、FileInputStream(文件输入流)

1.FileInputStream  用于来读取文件内的内容
2.2.FileInputStream用来操作字节
3.需要读取字符流先考虑使用FileReader
4.构造方法:
	publicFileInputStream(Filefile)  通过打开一个到实际文件的连接来创建一个 FileInputStream
	publicFileInputStream(Stringname)
		通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name
5.构造方法操作两件事:
	1.实例化FileInputStream
	2.将FileInputStream指向文件
6.使用的步骤:
	A.实例化FileInputStream
	B.调用FileInputStream的方法
	C.关闭流
7.读取的原来如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cGwG3jhw-1646571355340)(C:/Users/%E6%82%B2%E9%99%8C/AppData/Roaming/Typora/typora-user-images/image-20220306200307081.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5QxkmfC-1646571355341)(C:/Users/%E6%82%B2%E9%99%8C/AppData/Roaming/Typora/typora-user-images/image-20220306200340632.png)]

文件出入流的方法:read()和read(b)的比较:

1.read()是一个一个字节的读入, 效率慢 read(b)一次读取多个字节存入数组里面 ,效率高

2.read()返回的事读取的字节 read(b)返回值的事读取的内容的有效字节的长度

六、高效流

1.高效输入流:
	A.BufferedInputStream
	B.内部创建了一个缓冲区的数组  这个数组的长度为8192 高效率
2高效输出流:
	A.BufferedOutputStream
	B.内部创建了一个缓冲区的数组  这个数组的长度为8192 高效率
3.高效输入流和高效输出流:
	他们本身是没有读取文件的功能,只能对InputStream和OutputStream的封装,提供一个缓存的数组
4.高效的原因:
	底层封装了一个数组,高效流一次读入8192个字节的数组,存入缓存数组中,每一次读取内容时候可以从缓存区的数组中获取,避免于磁盘进行多次交互,所以高效
5.常用的构造方法:
	publicBufferedInputStream(InputStream in)
		创建一个 BufferedInputStream 并保存其参数,即输入流 in
	publicBufferedOutputStream(OutputStream out)
		创建一个 BufferedOutputStream 并保存其参数,即输入流 out

七、关闭流资源的顺序

1.从下往上关闭(最后使用的先关闭)
2.不管是否发生异常,都需要关闭流的使用,在finally中关闭流资源
3.关闭流资源需要进行非空验证

八、字符流

1.用于来读取字符
2.分类:字符输出流(写) 字符输入流(读)
3.为什么使用字符流的原因:
	使用字节流来读取出来的字节需要进行字节转换,在转换会发生乱码,使用字节操作字符比较麻烦
	字符流=字节流+编码表
4.在任何的编码表中:中文的第一个字节都是负数,根据这个来进行编码的转换

九、编码表

1.编码表:提供字节转换成字符的规则
2.常见的编码表:
	1.ASCII 西方国家常用的编码表,范围是0-127  所有的编码表的0-127都是遵循ASCII编码表的规则
		48==>'0'  65==>'A'  97==>'a'
	2.GBK
		G2312延申的编码表,是一种可以提供转换中文的编码表,一个中文在这个编码结构下占两个字节
	3.unicode 
		是一种万国码,这个编码表包含所有国家的常用字符,范围是0-65535
	4.UTF-8(重点)
		开发界同用的编码格式,大部分的公司使用这个编码格式  一个中文占这个编码表的三个字节
3.字符串的编解码:
	方法:A.public byte[] getBytes(Charset charset)
			将字符串转换为字节数组,按照指定的编码表
		 B.public String(byte[] bytes, Charset charset)
		 	将字节数组转换为字符串,按照指定的编码表

十、字符流(写Writer)

1.Writer是写入的字符流的抽象类
2.子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。
3.多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能
4.常用的方法:
	A.public abstract void flush()  刷新该流的缓冲
	B.public void write(char[] cbuf)  写入字符数组
 	C.public abstract void write(char[] cbuf,int off, int len) 写入字符数组的某一部分
 	D.public void write(String str) 写入字符串
 	E.public void write(int c)  写入单个字符
 	F.public void write(String str,int off, int len)  写入字符串的某一部分
5.子类:FileWriter

十一、FileWriter

1.用来写入文件的便捷类
2.可以先在 FileOutputStream 上构造一个 OutputStreamWriter 设置编码表格式
3.FileWriter 用于写入字符流。要写入原始字节流,请考虑使用 FileOutputStream。 
4.构造方法:
	A.public FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象
	B.public FileWriter(File file,boolean append)   
			根据给定的 File 对象构造一个 FileWriter 对象。如果第二个参数为 true,则将字节写入文件末				尾处,而不是写入文件开始处
	C.public FileWriter(StringfileName)  根据给定的文件名构造一个 FileWriter 对象
	D.public FileWriter(StringfileName, booleanappend)  
			根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象

十二、字符流–(读)Reader

1.用于读取字符流的抽象类
2.子类必须实现的方法只有 read(char[], int, int)
3.多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能
4.常用的方法:
	a.public int read() 读取单个字符
	b.public int read(char[] cbuf)  将字符读入数组
	c.public abstract int read(char[] cbuf,int off,int len)
			将字符读入数组的某一部分


  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个胖小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值