day21IO流

来源:互联网 发布:公安部 网络安全监管 编辑:程序博客网 时间:2024/06/05 01:03

IO流:存取皆为文件;

字节流文件:字节 byte ,可以以字节为单位存取数据

字符流文件:在java中,字符使用是双字节的Unicode编码

对象流文件:在java中,还可以以对象为单位存取数据;

 

文件:File

父类异常:IOException

 

IO章节的设计是有缺陷的,因为它设计时是“面向抽象类”的!

学习集合时,使用接口的引用,来操纵其具体的实现类;

学习IO时,使用抽象类的引用,来操纵其具体的子类;

 

字节流的抽象父类:

输出:

java.io.OutputStream

|java.io.FileOutputStream

|File

输入:

java.io.InputStream

|java.io.FileInputStream

|File

当操纵字节流时,如何操作?

只需要将抽象父类中的方法搞明白,用父类引用调用即可。

对于具体的子类,只需要注意构造器构成。

父类方法,子类构造器!

接口方法,实现类构造!

 

字符流的抽象父类:

输出:

java.io.Writer

|java.io.FileWriter

|File

输入:

java.io.Reader

|java.io.FileReader

|File

 

对象流:类是类操作

输出:

java.io.ObjectOutputStream

|java.io.FileOutputStream

|File

输入:

javao.io.ObjectInputStream

|java.io.FileInputStream

|File

 

关于字符的存储问题:

java中使用是双字节编码;

问题:一个英文字符在java中存储时,实际上需要多大的空间?以2字节吗?

String类中提供了将字符串转换为字节数组的方法:

 

使用Io包中的类处理的通常不是“堆区”资源,而是“系统资源”。

要点在于系统资源不会被垃圾回收器自动回收,只能“手动释放”!

java中实际上有三类资源:

1、 可以自动回收的“堆区”资源,使用垃圾回收器机制完成;

2、 自动回收的“栈区”资源,超过生命周期时由程序自动回收;

3、 由程序员手动释放的资源,属于系统资源

a) io包中类操纵的系统资源

b) sql包中类操纵的系统资源

c) 使用以上两个包中的接口或类时,通常会有检查异常要处理;

 

7.0版本之前,以上两个包中类或接口操纵的系统资源,是分别释放的,没有统一的操作方式,在7.0包括以后,将两类资源的释放统一起来。

 

抽象类OutputStream中定义的方法:

向文件中写入单个字节:

注意:参数为整数类型,而非字节类型;为什么?

 

//public void write(byte b);

使用最多的向文件中写入字节的方法,以字节数组为单位;

 

读取字节流文件时:

获取单个字节的方法:

注意:返回的整数类型,而非字节类型。为什么?

 

使用较多的从字节流文件中读取字节,将字节存储到字节数组中:

 

 

字符流的写读操作:

写入单个字符的方法:

注意:参数为整数类型,而非字符类型。为什么?

 

常用的写方法:

 

常用的方法:

 

读取字符流文件:

读取单个字符:

注意:返回是整数类型,而非字符类型。为什么?

 

读取字符,存入到字符数组中。

 

为什么读写字节或字符,写入的或读取的都是整数类型?

为了程序的扩展(包括编码表的可能性扩展),以及版本的升级。

 

核心类File

封装:用File的引用来指向实际存在某个位置上的数据文件;

位置:绝对路径和相对路径

java中,将文件和文件夹共同封装为File类型;

几个重要的需要掌握的方法:

判断文件是否存在?

 

获取文件的绝对路径:

 

判断是否文件或文件夹?

 

查询某个已经存在的目录下有哪些子目录和文件:

 

一个重要的根据过滤规则获取文件的方法:

 

java.io.AutoCloseable    7.0

|java.io.Closeable   5.0

7.0版本中添加了一个父接口AutoCloseable,定义了一个close()方法,至此Java中系统资源(iosql)的释放,就由这一个接口完成。

// try-with-resource 

7.0版本中新增加的这个功能是在异常处理代码中,对系统资源进行释放。

用字节流读取一个文件,简单的;

从一个文件中读取数据,再写入到另一个文件中;

比如用字节流读文件A,用字符流写入文件B

与对象流有关的类和接口:

输入:

ObjectInput  接口

|ObjectInputStream 

|FileInputStream

|File

ObjectOutput

|ObjectOutputStream

|FileOutputStream

|File

 

如何理解序列化问题?反序列化?

冰箱的作用就是序列化。序列化功能尤其用在网络传输方面,以保证传送数据的安全性。

对数据进行序列化操作之后,相当于对数据增强了保护;

当数据传输到目的地后,再进行反序列化操作,相当于获得了保护后的数据;

这样通过传输前的序列化保护和传输到目的地后数据的安全获取,达到了数据保护的目的。

利用输出对象流引用向文件中写对象,属于“序列化”操作;

利用输入对象流引用从文件中读取对象,属于“反序列化”操作;

向文件中序列化对象时的字段数据保护问题;

0 0
原创粉丝点击