需要掌握的几个知识点
1、编码的问题
2、File类的使用
3、RandomAccessFile (java提供的对文件内容的访问类 可以读写文件 )
4、字节流
5、字符流
6、对象的序列化和反序列化
关于第一个编码的问题,详情可查阅百度
File类的构造函数以及下面的方法摘要可查看JDK帮助手册
一、RandomAccessFile类
简介: RandomAccessFile类支持随机访问文件,可以访问文件的任意位置
(1) Java文件模型 :
硬盘上的文件是 byte byte byte存储的,是数据的集合。
(2) 打开文件
有两种模式"rw"(读写) “r”(只读)
RandomAccessFile raf = new RandomAccessFile (File file,"rw");
文件指针,打开文件时指针在开头 pointer = 0;
1.2.1. 读方法
raf .read() -----> 读一个字节 例如 1111 1111 0000 1111这是两个字节 ,只会从 高位读取 1111 1111 这一个字节
1.2.2.写方法
raf .write(int w) -----> 只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
二、IO流
2.1字节流
2.1.1) InputStream 、 OutputStream
InputStream抽象了应用程序读取数据的方式
OutputStream抽象了应用程序写出数据的方式
2.2) EOF = End 读到-1就读到了结尾
2.3) 输入流基本方法
int b = in.read(); 读取一个字节无符号填充到int低八位. -1是EOF
in.read(byte[] buf);
in.read(byte[] buf,int start,int size);
2.4)输出流基本方法
out.write(int b); 写出一个byte到流,b的低八位
out.write(byte[] buf);将一个byte字节数组写入到流
out.write(byte[] buf,int start,int size);将一个byte字节数组写入到流 从start开始,长度为size
2.5) BufferedInputStream & BufferedOutputStream
这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。
关于文件的输出,附上个人理解: 从应用程序把输入放入文件,相当于把一缸水倒到另一缸水里去
FileOutputStream —> write()方法相当于一滴一滴的把水转移过去
DataOutputStream------>writeXXX()方法相当于一瓢一瓢的把水转移过去
BufferedOutputStream------>write()方法相当于一瓢一瓢先放入桶里,在从桶里倒过去,从而提高了性能
2.2 字符流(Reader Writer)
字符的处理,一次处理一个字符
字符的底层是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
FileReader/PrintWriter -------> 写一行
2.3字符流的过滤器
BufferedReader --------> readLine 一次读一行
BufferedWriter/PrintWriter -------> 写一行
三、序列化
1.对象的序列化
对象的序列化就是将Object转换成byte序列
2.对象的反序列化
对象的反序列化就是将byte序列转换成Object
3.序列化接口(Serializable)
对象必须实现序列化接口才能序列化,否则将抛出异常,这个接口没有任何方法,只是一个标准
4.关键字:transient 不进行默认的序列化操作
private void writeObject(java.io.ObjectOutputStream s)
可以进行序列化操作
pviate void readObject(java.io.ObjectInputStream s)
可以进行反序列化操作
关于序列化的一些知识点:
对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么父类的构造函数将会被调用。
反之如果实现了序列化接口,那么父类的构造函数将不会被调用