java-IO流
发布日期:2021-06-29 07:15:57
浏览次数:2
分类:技术文章
本文共 2234 字,大约阅读时间需要 7 分钟。
什么是IO流
- I:Input O:Output 通过IO可以完成硬盘文件的读和写。 流可以看作是内存与硬盘之间的通道。
- java中的IO流都已经写好了。
IO流的分类
- 按照流的方向进行分类,以内存作为参照物: 往内存中去,叫做输入(Input),或者叫做读(Read)。 从内存中出来,叫做输出(Output),或者叫做写(Write)。
- 按照读取数据方式不同进行分类: 按照字节的方式读取数据,一次读取一个字节byte,叫做字节流。等同于一次读取8个二进制位。这种流是万能的什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件等等。 有的流是按照字符的方式读取数据的,一次读取一个字符,叫做字符流。这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件(txt)。
- Java中的IO流有四种: java.io.InputStream -------- 字节输入流 java.io.OutputStream ------ 字节输出流 java.io.Reader -------------- 字符输入流 java.io.Writer ----------------- 字符输出流
需要掌握的16个流
-
文件专属:
java.io.FileInputStream java.io.FileOutputStream java.io.Reader java.io.Writer -
转换流:(将字节流转换成字符流)
java.io.InputStreamReader java.io.outputStreamReader -
缓冲流专属:
java.io.BufferedReader java.io.BufferedWriter java.io.BufferedInputStream java.io.BufferedOutputStream -
数据流专属:
java.io.DataInputStream java.io.DataOutputStream -
对象专属流:
java.io.ObjectInputStream java.io.ObjectOutputStream -
标准输出流:
java.io.PrintWriter java.io.PrintStream
IO流中都有的方法
- 所有流都实现了:java.io.Closeable接口,都有Close()方法,所以所有的流都是可关闭的。
- 所有的输出流都实现了:java.io.Flushable接口,都是可刷新的,都有flush()方法。 输出流在最终输出之后,一定要记得用flush()方法刷新一下。这个刷新表示将通道中剩余为输出的数据强行输出完。用于清空通道。
File类中的常用方法
-
判断是否是一个目录
isDirectory() -
判断是否是一个文件
isFile()
3.获取文件名
getName()-
获取文件最后一次修改时间
返回的是从1970年到现在的总毫秒数 lastModified() -
获取文件大小
length()
6.拷贝
copyDir(拷贝源 , 拷贝目标) 拷贝源:需要拷贝的文件路径 拷贝目标:需要拷贝过去的目录文件字节输入流:FileInputStream
FileInputStream的特点
- 文件字节输入流可以读任何类型的文件。
- 以字节的方式,完成输入的操作,完成读的操作。
FileInputStream中的常用方法
-
构造方法
FileInputStream fis = new FileInputStream(“文件路径”) -
读
从此输入流中读取一个数据字节,返回一个数据字节,如果达到文件末尾,返回-1。 因为读一次只能返回一个字节所以最好用循环读。 read() -
获取当前目录下所有的子文件
返回一个文件数组。 listFiles()
序列化和反序列化
什么是序列化和反序列化
- 序列化(Serialize)就是把java对象从内存放到硬盘中,保存成文件的过程 反序列化(DeSerialize)就是把文件从硬盘上放到内存中,恢复成java对象的过程。
序列化的实现
- ObjectOutPutStream oos = new ObjectOutPutStream(new FileOutputStream(“类文件”));
反序列化的实现
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“类文件”));
一次序列化多个对象
- 可以将对象放到集合当中,序列化集合。
transient关键字
- transient表示游离的,不参与序列化。transient修饰的属性不参与序列化。
序列化版本号
- 参与序列化和反序列化的对象,必须实现Serializable接口。
- Serializable接口只是一个标志接口,这个接口中什么代码也没有。这个标志是给JVM看的,JVM看到后会自动生成一个序列化版本号。如果有两个不同的人写了同名但代码不同的类,JVM可以可以靠序列化版本号区分。 如果改变了代码,那么必然要重新编译,此时JVM会自动生成一个全新的序列化版本号。但是JVM会认为这是一个全新的类。 所以,最好给实现了Serializable接口的类一个固定不变了序列化版本号。
- 可以使用IDEA自动生成 序列化版本号,一般是不会重复的。
转载地址:https://blog.csdn.net/zjw1060620998/article/details/116400912 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月08日 13时23分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
39岁单身程序员入住养老院
2019-04-29
写论文,这个神器不能少!
2019-04-29
我在哥大读博的五年,万字总结
2019-04-29
本科、硕士、博士,究竟有何区别?
2019-04-29
如果我的实验室也这样布置,那多好。
2019-04-29
现在做硬件工程师还有前途吗?
2019-04-29
用 50 种编程语言写“Hello,World!”
2019-04-29
GD32替换STM32,这些细节一定要知道。
2019-04-29
华为员工离职心声:菊厂15年退休,感恩,让我实现了财务自由!
2019-04-29
春晚上的“拓荒牛”
2019-04-29
嵌入式驱动自学者的亲身感受,有什么建议?
2019-04-29
华为被超越!这家公司成中国最大智能手机制造商,不是小米!
2019-04-29
腾讯机器狗,站起来了!
2019-04-29
我用自己创造的深度学习框架进入腾讯,爽!
2019-04-29
芯片为什么持续缺货?
2019-04-29
又涨了?2021 年 3 月程序员工资统计新出炉
2019-04-29
初入行的C++程序员,如何快速摆脱CRUD阶段?
2019-04-29
研究生跟了一个很棒的导师是种怎样的体验?
2019-04-29
学会扶墙的机器人:没有什么能让我倒下!
2019-04-29
美国无人机在火星首飞成功,创造历史,3米飞行高度悬停30秒
2019-04-29