输入流: 只能从中读取数据,而不能向其写入数据。
输出流:只能向其写入数据,而不能向其读取数据。
字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。
节点流:可以直接从/向外部设备读取/写入数据的流,称之为节点流,节点流也被称之为低级流。
处理流:对于已经存在的流进行了连接和封装,扩展了原来的读/写的功能。处理流也被称之为高级流。
java的io包当中包括40多个流,他们都有紧密的联系,和使用的规律,这些流都源于4个抽象基类。
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
注:表中粗体字所标出的类代表节点流,必须直接与指定的物理节点关联:斜体字标出的类代表抽象基类,无法直接创建实例。
输入字节流转为字符流需要用到inputstreamReader的构造方法:
InputStreamReader(InputStream in)
如:
InputStreamReader ins = new InputStreamReader(System.in);
InputStreamReader ins = new InputStreamReader(new FileInputStream(“test.txt”));
输出字符流转为字节流用到OutputStreamWriter或PrintWriter的构造方法:
OutputStreamWriter(OutputStream out)
PrintWriter(OutputStream out)
如:
OutputStreamWriter outs = new OutputStreamWriter(new FileOutputStream(“test.txt”));
过滤流(filter stream)也称为包装流,是为某种目的过滤字节或字符的数据流,基本输入流提供地读取方法只能用来读取字节或字符,而过滤器流能够读取整数值、双精度值或字符串,但需要一个过滤器类来包装输入流。FilterInputStream 类和 FilterOutputStream 类分别是 DataInputStream 类和 DataOutputStream 类的父类,它们分别实现了 DataInput 和 DataOutput 接口,该接口定义了独立于具体机器的带格式的读写操作,从而可以实现对 Java 中的不同基本类型数据的读写。
序列化和反序列化的含义:
Java 序列化是指:将对象转化成一个字节序列(二进制数据)的过程。
将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化。
Java 反序列化是指:将一个对象的字节序列恢复成 Java 对象的过程。
一个平台中序列化的对象,可以在另一个平台中进行反序列化,因为这个过程是在 JVM 中独立完成的,可以依赖于 Java 的可移植性。
Java提供的支持:
ObjectOutputStream:IO 类,包含序列化对象的方法,writeObject()
ObjectInputStream:IO 类,包含反序列化对象的方法,readObject()
上面两个 IO 流类是高层次的数据库,需要借助文件流进行序列化与反序列化操作。
Serializable ,接口,是一个标志性接口,标识可以在 JVM 中进行序列化,JVM 会为该类自动生成一个序列化版本号。参与序列化与反序列化的类必须实现 Serializable 接口。
serialVersionUID,类属性,序列化版本号,用于给 JVM 区别同名类,没有提供版本号,JVM会默认提供序列化版本号。
transient,关键字,当序列化时,不希望某些属性参与,则可以使用这个关键字标注该属性。
File类:File类代表一个特定的文件或者目录(文件夹),并提供了若干方法对该文件或目录进行操作。
构造方法:
File(String pathname):通过路径名创建一个新 File 实例。
File(File parent, String child):根据父目录路径File实例和子目录或文件路径创建一个新 File 实例。
File(String parent, String child) :根据父目录路径和子目录或文件路径创建一个新 File 实例。
文件类(File)
1.获取文件信息
getName():获取文件名称,返回String
canRead():boolean类型,是否可读
exist()/isFile():boolean类型,是否存在
length():long,文件长度,以字节为单位
getAbsolutePath():文件绝对路径,返回String
getParent():文件父路径,返回String
isDirectory():boolean 是否为目录
isHidden():boolean是否隐藏
lastModified():long,最后修改时间
delete():删除文件
createNewFile():通过实例创建文件
2.文件输入输出流类
1、字节流
InputStream类:是字节输入流的抽象类,所有字节输入流的父类 eg:BufferedInputStream,FileInputStream等。
常用方法:
read():读取数据的下一个字节,返回0~255的int字节值,如果已达到流末尾而没有可用字节,返回-1。
read(byte[] b):输入流读取一定长度的字节,并以整数形式返回字节数。
close():关闭流。
OutputStream类:是字节输出流的抽象类,所有字节输出流的父类 eg:BufferedOutputStream,FileOutputStream等。
常用方法:
write(int b):将指定字节写入输出流。
write(byte[] b):将b个字节从指定byte数组写入此流。
write(byte[] b,int off,int len):将指定byte数组中从偏移量off开始len个字节写入流。
flush():彻底完成输出并清空缓存区。
close():关闭流。
BufferedInputStream、BufferedOutputStream:带缓存的输入输出流。
FileInputStream:以字节流方式读取,FileOutputStream以字节流方式写入。
2、字符流
Java为支持文件的读写引入Reader和Writer两个类。
Reader类:是字符流输入流的抽象类,所有字符输入流的父类 eg:BufferedReader,InputStreamReader,FileReader等。
Writer类:是字符流输出的抽象类,所有字符输出流的父类 eg:BufferedWriter,OutputStreamWriter,FileWriter等。