关于io的一些知识导论,可以对着一条一条检验自己的理解。

一、知识点

(1)File类的具现

java.io.File类用于表示文件(目录),File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问和操作。

(2)RandomAccessFile

RandomAccessFile是对文件内容进行访问的服务类。既可以读文件,也可以写文件。
RandomAccessFile支持随机访问文件,可以访问文件的任意位置

(3)文件操作的一些要点

  1. java文件模型:在硬盘上的文件是byte byte byte存储的,是数据的集合。
  2. 打开文件有两种模式:”rw”(读写)、”r”(只读)。
  3. RandomAccessFile raf = new RandomeAccessFile(file,”rw”);文件指针,打开文件时指针在开头pointer = 0;
  4. 写方法raf.write(int)为只写一个字节(后8位),同时指针指向下一个位置,准备再次写入。
  5. 读方法int b = raf.read()为读一个字节。
  6. 文件读写完成以后一定要关闭。

(4)序列化与基本类型序列化的一些要点

  1. 将类型int转换成4byte或将其他数据类型转换成byte的过程叫序列化,数据—->n byte。
  2. 反序列化将n个byte 转换成一个数据的过程,nbyte —> 数据。
  3. RandomAccessFile提供基本类型的读写方法,可以将基本类型数据序列化到文件,或者将文件内容反序列化为数据。

(5)IO流(输入流、输出流)

1.字节流

  1. InputStream、OutputStream:InputStream抽象了应用程序读取数据的方式,
    OutputStream抽象了应用程序写出数据的方式。
  2. EOF = End,读到-1就读到结尾。
  3. 输入流基本方法:
    int b = in.read();读取一个字节无符号填充到int低八位。-1是 EOF。
    in.read(byte[] buf)
    in.read(byte[] buf,int start,int size)
  4. 输出流基本方法:
    out.write(int b);写出一个byte到流,b的低8位。
    out.write(byte[] buf)将buf字节数组都写入到流。
    out.write(byte[] buf,int start,int size)
  5. FileInputStream:实现了在文件上读取数据。
  6. FileOutputStream:实现了向文件中写出byte数据的方法
  7. DataOutputStream/DataInputStream:实现了对”流”功能的扩展,可以更加方面的读取int、long字符等类型数据,比如writeInt()、writeDouble()、writeUTF()。
  8. BufferedInputStream&BufferedOutputStream:这两个流类位IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能。
  9. 从应用程序中把输入放入文件,相当于将一缸水倒入到另一个缸中。
  10. FileOutputStream.write()方法相当于一滴一滴地把水“转移”过去
  11. DataOutputStream.writeXxx()方法会方便一些,相当于一瓢一瓢把水“转移”过去。
  12. BufferedOutputStream.write方法更方便,相当于一飘一瓢先放入桶中,再从桶中倒入到另一个缸中,性能提高了。

2.字符流

  1. 编码问题。
  2. 认识文本和文本文件:
    java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)。
    文件是byte byte byte …的数据序列。
    文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果。
  3. 字符流(Reader Writer)—->操作的。是文本文本文件。
  4. 字符的处理,一次处理一个字符
  5. 字符的底层任然是基本的字节序列。

3.对象的序列化,反序列化

  1. 对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化。
  2. 序列化流(ObjectOutputStream),是过滤流—-writeObject。
  3. 反序列化流(ObjectInputStream)—readObject。
  4. 序列化接口(Serializable),对象必须实现序列化接口 ,才能进行序列化,否则将出现异常。这个接口,没有任何方法,只是一个标准。
  5. transient关键字,禁止某些字段被序列化,保证安全。

二、总结

记录一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注