IO流小结
8个io流
读写相关的代码不难,重点在于需要掌握每个io流的特点
字节流(可以读写任意类型的文件,但是建议只针对非文本类的文件):
1.FileOutputStream: 基本字节输出流 写 没有缓冲区
2.FileInputStream: 基本字节输入流 读 没有缓冲区
3.BufferedOutptStream: 字节缓冲输出流 写 有缓冲区
4.BufferedInputStream: 字节缓冲输入流 读 有缓冲区
字符流(专门读写文本类的文件,可以解决中文乱码问题):
5.FileWriter: 基本字符输出流 写 有缓冲区
6.FileReader: 基本字符输入流 读 有缓冲区
7.BufferedWriter: 字符缓冲输出流 写 有缓冲区 特有方法newLine()
8.BufferedReader: 字符缓冲输入流 读 有缓冲区 特有方法readLine()
应用场景
我要读写普通的图片
我要读写大视频
我要读写普通文本文件
转换流
1.转换:编码和解码(解决中文乱码问题)
A.FileReader=基本字节流FileInputStream + 解码
B.FileWriter=基本字节流FileOutputStream + 编码
C.OutputStreamWriter:具有编码功能 写数据
D.InputStreamReader:具有解码功能 读数据
FileReader继承了InputStreamReader,FileWriter继承了OutputStreamWriter
jdk11之前
转换流可以通过构造方法的第二个参数指定编码表,而基本字符流没有这个功能(只能默认采用utf-8)
因为实际开发项目时,基本上都采用utf-8编码
jdk11之后
转换流可以通过构造方法的第二个参数指定编码表,而基本字符流也有这个功能
转换流基本没有用处
5.应用场景
jdk11之前,读写utf-8格式的文本文件 ABCD 读写GBK格式的文本文件 CD
jdk11之后,读写utf-8格式的文本文件 ABCD 读写GBK格式的文本文件 ABCD
对象流
java是面向对象的编程语言 我们经常会new对象 而且把数据存到对象中了
Student s=new Student(“张三”,“男”,20);
我要想把这三个数据写到文件中保存起来,需要从对象中取数据
如果可以直接保存对象该多好?
-
序列化:把java对象写到文件中
-
反序列化:从文件中读取对象
-
Serializable接口是一个空接口,起到标记作用
Java默认不允许对任何类的对象进行序列化操作,只有碰见实现了Serializable接口的对象才允许
Properties
-
Hashtable和HashMap是兄弟,Properties就是一个Map集合,只能存String数据
-
配置文件:
很多软件或项目都有各种各样的配置文件,常见的有:.xml , .properties
.properties配置文件内容格式有要求:
一行一个键值对,中间用=分割
Properties类的主要作用就是专门用来读写.properties配置文件
多线程
同时干多件事
同时运行多个程序
多线程需要靠硬件支持,主要指的就是CPU
并行:在同一时刻,有多个指令在多个CPU上同时执行。
并发:在同一时刻,有多个指令在单个CPU上交替执行。
进程:正在运行的程序,例如:QQ/Tlias
线程:一个进程可以包含一个线程(单线程程序),也可以包含多个线程(多线程程序)
工厂就是进程,生产线就是线程
QQ就是进程,每个聊天窗口就是一个线程 多线程
迅雷就是进程,每个下载就是一个线程 多线程
为什么好多程序都是多线程的?为什么要学习多线程编程呢?
因为多线程可以提高程序的运行速度/效率 ,例如:同时上传多张图片