目录
八、序列号serialVersionUID和transient关键字
一、I/O流概述
1、I/O流介绍
I和O,分别是Input和Output两个单词的缩写,Input是输入,Output是输出。
流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输。
IO流就是用来处理设备间数据传输问题的。常见的应用: 文件复制、文件上传、 文件下载等。
2、I/O流分类
按照数据的流向:
输入流:读数据
输出流:写数据
按照数据类型:粒度
字节流: 字节输入流和字节输出流
字符流: 字符输入流和字符输出流
字节流和字符流的使用场景:
如果操作的是纯文本文件,优先使用字符流
如果操作的是图片、视频、音频等二进制文件,优先使用字节流
如果不确定文件类型,优先使用字节流.字节流是万能的流
3、I/O流程序书写流程
- 在操作之前,要导包,java.io包
- 在操作流对象的时候,要处理解决异常(IOException)
- 在操作完流对象之后,必须关闭资源, 所有流资源的关闭 close();
二、字节流
1、字节流概述
- 字节流抽象基类: 以字节读写文件
- InputStream:这个抽象类是表示字节输入流的所有类的超类
- OutputStream:这个抽象类是表示字节输出流的所有类的超类 根据交互设备的不同,有不同的具体子类
2、字节输入流FileInputStream
1)FileInputStream是InputStream一个具体子类,用于和磁盘上的文件进行交互
2)FileInputStream不仅可以一次读取一个字节,也可以一次读取很多个字节;不仅可以读取纯文本文件,也可以读取图片、视频、音频等非纯文本文件。一切数据在计算机中都是以字节的形式在存储和计算
3)构造方法:
FileInputStream(File f):将一个File对象所表示的文件路径封装在一个字节输入流中,未来从文件中以字节方式读取文件内容
FileInputStream(String path):将一个字符串所表示的文件路径封装在一个字节输入流中,未来从文件中以字节方式读取文件内容
注意事项:无论是哪个构造方法,都只能封装文件的路径,封装文件夹的路径没有任何意义,因为文件夹本身没有任何数据,所以也不能使用流对象读取数据
4)读取文件的方法:
1)int read():从当前的字节输入流中,读取并返回一个字节,返回值结果int类型, 表示读取到的字节对应的整数结果, 如果返回-1表示证明文件读取完毕
2)int read(byte[] arr):将最多arr.length个字节,读取到的字节放置到arr中,返回值结果int类型, 表示本次读取到的字节的个数, 如果读到-1,证明文件读取完毕
注意 : 1. 数组读取效率远远优于单个字节读取效能
2 .实际开发中,数组大小一般都是1024的倍数, 常见: 1024 1024 * 4 1024 * 8
5)void close():关闭该流对象
3、 字节输出流FileOutputStream
1)说明:可以将字节数据写出到指定的文件中
2)构造方法:
FileOutputStream(File f):将f描述的路径文件封装成字节输出流对象 FileOutputStream(String path):将path描述的文件路径封装成字节输出流对象 FileOutputStream(String path,boolean append):如果第二个参数为true,则字节将写入文件的末尾而不是开头
FileOutputStream(File path,boolean append):如果第二个参数为true,则字节将写入文件的末尾而不是开头
3)字节流写数据的方式:
void write(int b): 将指定的字节写入此文件输出流一次写一个字节数据
void write(byte[] b): 将b.length字节从指定的字节数组写入此文件输出流
void write(byte[] b, int off, int len): 将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 </