IO流部分的学习我认为是各类方法的集合使用,了解IO流并不难,就像之前学习Java内容里面的一些方法一样,只是他所对待的应用方向不同而已,下面我来轻谈IO流的部分知识及使用方法。
接下来我会通过几个部分来介绍IO流中的一些方法的使用
-
首先是IO流的入门知识,什么是IO流
什么是IO流:
IO Stream(input output Steam):输入输出流
本质指的就是计算机中数据的流入和流出:
从磁盘上将数据读入内存
从内存中将数据写入到硬盘
也就是说,从狭义上来说,我们一般IO流指的就是磁盘和内存之间的数据流动但是从广义来说,不同电脑之间的数据流动,也是一种IO流,网络通信也是IO流(socket) 在本地进程间的数据流动,就是狭义上的IO流 在远程进程间的数据流动,也就是一种IO流(Socket)
java的IO流:
将底层的open函数进行了大量的封装,提供了大量好用的、符合各种场景的IO对象供大家使用
java.io包
InputStream类:字节输入流
OutputStream类:字节输出流
IO流的分类:
|-- 数据的流动方向
|-- 输入流 InputStream、Reader
|-- 输出流 OutputStream、Writer、Printer
|-- 根据的数据的类型
|-- 字节流 XxxxStream
|-- 字符类 Writer、Printer、Reader
|-- 根据作用
|-- 节点流
|-- 装饰流(过滤流)
|-- 转换流
转换字节流和字符流
2. File方法的使用
首先我们先来看帮助文档的解释:
而后我们来看代码是如何展示的,还有其中的很多方法,我就给大家看看这些方法,具体的还得让大家去尝试:
可以看到file有很多种方法,其中也有些方法和Linux系统里面的命令很像,比如创建文件夹:file.mkdir(),这就很类似
这是找的一些手稿摘抄资料,仅供参考
-
过滤器
我们可以通过文件名后缀名来对文件筛选时进行过滤:
这就是用过滤器的使用方法,对后缀名为Java的文件进行过滤筛选 -
输入输出流
本质是计算机中数据的流入和流出
狭义上:从磁盘上将数据读入内存
或从内从中将数据写入到硬盘内
就是指磁盘和内存之间的数据流动
广义上:不同电脑之间的数据流动,也是一种IO流,网络通信也是一种IO流,在远程进程的IO流(socket);
Java的IO流将底层open函数进行了大量的封装,如Java.IO包
InputStream类
OutputStream类
下面我们来看一看输出输出流的代码展示:
我们以输入输出流中的fileOutputStream子类进行演示,其他的几个类都差不多:
这是代码展示,我就举这种方法的一个例子,其他的使用方法都是大同小异的,样式都是差不多的,使用应用场景会用所不同。 -
IO流包中的子类
io包里面的类有很多子类运用,我就讲其中的一些类 -
数据流的使用
这是代码展示。
数据流的使用:
如果要保存数字,只要将数字转换为字符串,也就是说
以字符流的形式保存数据,这样有时候并不是我们需要的,我们有时候就是
需要以字节保存数据,因此就可以使用数据流来包装文件流完成。
字符流:
字符流就是以字符的形式传递数据的IO流
电脑中,所有的数据都可以以字节的形式传递
不是所有的数据都可以转换字符的!!!
|-- InputStrean 输入字节流
|-- OutputStream 输出字节流
字符流
|-- Reader
|-- Writer
注意:字符流是存在编码的!!!! -
对象流
这有两个测试代码进行演示对象流的使用
对象流:
|-- ObjectInputStream
对象输入流,从磁盘等保存介质中读取已经保存的对象数据
|-- ObjectOutputStream
将对象转换为数据,保存起来发现了问题:
只能保存系统提供一些类的对象(如包装类、字符串等类)
原因:java中要保存对象,该对象的类必须实现序列化接口!!!!在java中,如果要保存对象,必须序列化该对象!!!
对象序列化:
序列化(串行化):将程序中的对象这种逻辑概念通过特定方式做成字节(字符)数据,以方便与保存或者传输
反序列化:将序列化后的数据重新还原为抽象的对象
对象持久化:
将对象保存起来
transient关键字:
该关键字是用来修饰属性,一旦某个属性被这个关键字修饰,
则该属性不会进行持久化,也就是该值不会保存!!!
这是进行对象系列化的样式
8 .转换流
转换流:
能够实现字节流和字符流之间的转换
字符串对象:能够转换为字节数组或者字符数组
|-- InputStreamReader:将字节流转换为字符流操作
一个字节流,如果可以转换为字符流,一般建议转换字符流操作,类似于BufferedReader
readLine()方法,非常方便操作字符流
但是需要注意两个问题:
1、字符流存在着编码问题!!!
2、有些字节是无法转换为字符流的(如图片、视频等流媒体文件)
|-- OutputStreamWriter:
将字符流转换为字节流输出,好处就是可以使用字符流的好用的方法来处理字节流
这是转换流的代码展示;
输出结果我就不展示了。
9.总结
对于IO流,内容还有很对很多,尤其是对于Java这种语言,对于IO流的延申是非常广泛非常深的,我这肯定是讲部完整,讲不仔细的,但我罗列出几种方式来对IO流的部分需要掌握的内容进行了展示和讲解,我们也应当多熟悉这几块内容。还有就是我们在写IO流的代码时,发现会有很多的异常处理,这都是很正常的,所以在今后的学习中我们在多适应这种代码的变换,也要多加熟悉不同代码的样式所带来的不同改变。而且对于流的使用一定是要关闭的,不然在运行中会占用内存,或出现一些其他的错误影响。
IO其实是相对容易的,我们要了解和熟悉其中的原理,还有多许多方法要进行熟悉掌握和运用,这样在以后的做项目当中我们才会游刃有余,内容比较多,我们慢慢积累。