本系列文章在 https://github.com/freestylefly/javaStudy 持(jing)续(chang)更(duan)新(geng)中,欢迎有兴趣的童鞋们关注。
一、定义
流是指一连串流动的字符,是以先进先出的方式发送信息的通道。程序和数据之间是通过流进行关联的。
二、分类
1、按流向分
输出流:OutputStream和Writer作为基类
输入流:InputStream和Reader作为基类
2、按处理数据的单元划分
字节流:nputStream/OutputStream作为基类
字符流:Reader/Writer作为基类
三、流之间的层级关系
上层为基类
1、输入
Reader
InputStreamReader(可设置字符编码) Bufferendreader(带有缓冲区)
InputStream
FileInputStream objecInputStream(反序列化) DateInputStream(读二进制文件)
2、输出
Writer
OuputStreamWriterr(可设置字符编码) BufferendWriterr(带有缓冲区)
InputStream
FileOutputStream objecOutputStream(序列化) DateIOutputStream(读二进制文件)
四、流的正确使用
1、File类操作文件
1 | package demo1; |
特别注意:创建File对象的时候可以放决相对路径也可以放决对路径
直接写test.txt代表的是在该项目底下的文件
而如果携程D:\test.txt的话是代表此文件 在D盘下的文件
File类常用方法:
| 方法 | 说明 |
|—|—|
| boolean exisit() | 判断文件是否存在 |
| String getName() | 获得文件名 |
| boolean creatNewFile() | 创建文件(创建前要判断文件是否存在 ) |
2、使用字节流FileInputStream读文本文件
1 | package demo2; |
FileInputStream 常用方法
| 方法 | 说明 |
|—|—|
| inr read((byte[] b) | 将数据缓存在字节数组中最后通过String的构造方法将字节数组转换成字符串输出 |
|int read() | 一个字节一个字节的读 |
3、使用字节流FileInputStream和FileOutputStream复制文本文件
1 | package demo2; |
4、使用DataInputStream和DataOutputStream读写二进制文件
1 | package demo3; |
5、字符流FileReader & FileWriter
1 | package demo4; |
6、使用带有缓冲区的流输入输出,异常处理
1 | package demo5; |
注意指定字符编码,请确认是GBK还是UTF-8
五、一个重要综合性利用流的例子
1 | import java.io.BufferedReader; |
特别注意:一定要关闭流,有时候没关闭会出现很多的错误
六、序列化和反序列化
1、使用序列化保存对象信息(写出 objecOutputStream)
2、使用反序列化获取对象信息(写出 objecInputStream)
3、例子:
1 | package Demo1; |
七、反射
1 | package Demo2; |
1 | package Demo2; |
1 | package Demo2; |
1 | package Demo2; |
本文章已同步至我的GitHub仓库:Javastudy,期待您的加入:blush:
本文章已同步至苍何的个人博客,可以直接在博客上留言哦:blush:
来我的微信公众号玩耍呗:blush:
扫码无套路关注我的CSDN博客:blush:
>