java-IO流
发布日期:2021-06-29 07:15:57 浏览次数:2 分类:技术文章

本文共 2234 字,大约阅读时间需要 7 分钟。

什么是IO流

  1. I:Input
    O:Output
    通过IO可以完成硬盘文件的读和写。
    流可以看作是内存与硬盘之间的通道。
  2. java中的IO流都已经写好了。

IO流的分类

  1. 按照流的方向进行分类,以内存作为参照物:
    往内存中去,叫做输入(Input),或者叫做读(Read)。
    从内存中出来,叫做输出(Output),或者叫做写(Write)。
  2. 按照读取数据方式不同进行分类:
    按照字节的方式读取数据,一次读取一个字节byte,叫做字节流。等同于一次读取8个二进制位。这种流是万能的什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件等等。
    有的流是按照字符的方式读取数据的,一次读取一个字符,叫做字符流。这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件(txt)。
  3. Java中的IO流有四种:
    java.io.InputStream -------- 字节输入流
    java.io.OutputStream ------ 字节输出流
    java.io.Reader -------------- 字符输入流
    java.io.Writer ----------------- 字符输出流

需要掌握的16个流

  1. 文件专属:

    java.io.FileInputStream
    java.io.FileOutputStream
    java.io.Reader
    java.io.Writer

  2. 转换流:(将字节流转换成字符流)

    java.io.InputStreamReader
    java.io.outputStreamReader

  3. 缓冲流专属:

    java.io.BufferedReader
    java.io.BufferedWriter
    java.io.BufferedInputStream
    java.io.BufferedOutputStream

  4. 数据流专属:

    java.io.DataInputStream
    java.io.DataOutputStream

  5. 对象专属流:

    java.io.ObjectInputStream
    java.io.ObjectOutputStream

  6. 标准输出流:

    java.io.PrintWriter
    java.io.PrintStream

IO流中都有的方法

  1. 所有流都实现了:java.io.Closeable接口,都有Close()方法,所以所有的流都是可关闭的。
  2. 所有的输出流都实现了:java.io.Flushable接口,都是可刷新的,都有flush()方法。
    输出流在最终输出之后,一定要记得用flush()方法刷新一下。这个刷新表示将通道中剩余为输出的数据强行输出完。用于清空通道。

File类中的常用方法

  1. 判断是否是一个目录

    isDirectory()

  2. 判断是否是一个文件

    isFile()

3.获取文件名

getName()

  1. 获取文件最后一次修改时间

    返回的是从1970年到现在的总毫秒数
    lastModified()

  2. 获取文件大小

    length()

6.拷贝

copyDir(拷贝源 , 拷贝目标)
拷贝源:需要拷贝的文件路径
拷贝目标:需要拷贝过去的目录

文件字节输入流:FileInputStream

FileInputStream的特点

  1. 文件字节输入流可以读任何类型的文件。
  2. 以字节的方式,完成输入的操作,完成读的操作。

FileInputStream中的常用方法

  1. 构造方法

    FileInputStream fis = new FileInputStream(“文件路径”)

  2. 从此输入流中读取一个数据字节,返回一个数据字节,如果达到文件末尾,返回-1。 因为读一次只能返回一个字节所以最好用循环读。
    read()

  3. 获取当前目录下所有的子文件

    返回一个文件数组。
    listFiles()

序列化和反序列化

什么是序列化和反序列化

  • 序列化(Serialize)就是把java对象从内存放到硬盘中,保存成文件的过程
    反序列化(DeSerialize)就是把文件从硬盘上放到内存中,恢复成java对象的过程。

序列化的实现

  • ObjectOutPutStream oos = new ObjectOutPutStream(new FileOutputStream(“类文件”));

反序列化的实现

  • ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“类文件”));

一次序列化多个对象

  • 可以将对象放到集合当中,序列化集合。

transient关键字

  • transient表示游离的,不参与序列化。transient修饰的属性不参与序列化。

序列化版本号

  1. 参与序列化和反序列化的对象,必须实现Serializable接口。
  2. Serializable接口只是一个标志接口,这个接口中什么代码也没有。这个标志是给JVM看的,JVM看到后会自动生成一个序列化版本号。如果有两个不同的人写了同名但代码不同的类,JVM可以可以靠序列化版本号区分。
    如果改变了代码,那么必然要重新编译,此时JVM会自动生成一个全新的序列化版本号。但是JVM会认为这是一个全新的类。
    所以,最好给实现了Serializable接口的类一个固定不变了序列化版本号。
  3. 可以使用IDEA自动生成 序列化版本号,一般是不会重复的。

转载地址:https://blog.csdn.net/zjw1060620998/article/details/116400912 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Java多线程
下一篇:Java集合

发表评论

最新留言

很好
[***.229.124.182]2024年04月08日 13时23分59秒