#Java学习之路——基础阶段二(第八篇)

我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容。

前言:此随笔主要是Java基础中的基础,相信大家对这方面肯定有着自己的理解和认识,具体详解可以参照万能的baidu,有的我就一笔带过,希望在我的学习之路上能够有大牛进行指导,也有更多的小伙伴共勉。

1.缓冲流

在学习IO之后,接触到在FIleWriter和FileOutputStream中间接了解到了缓冲区,如果想再之后对文件就行修改,那么就可以flush对对象进行刷新,从而可以对流对象重新编写,今天学的依然是增强流操作,缓冲流也叫高效流,是对四个FileXXX流对增强。

构造方法:

BufferedInputStream,字节缓冲输入流

BufferedOutputStream:字节缓冲输出流

BufferedReader:字符输入流

BufferedWriter:字符输出流

这里的字符输入流和字符输出流有特有对方法一个是readline读取下一行用在BufferedReader一个是newline换行用在Bufferedwriter直接用缓冲流对象调用即可。

2.转换流

字符集:也叫编码表,是一个系统支持对所有字符对集合,包括各个国家对文字,标点符号,图形符号,数字等。。。

关于编码就会由于编码的字符集不对应导致不能更转换,显示乱码。

这里引入InputStreamReader 是Reader对子类

构造方法:

·InputStreamReader有两个构造方以一个是创建默认字符集的字符流,一个是创建指定字符集的字符流;前面是引入的File对象,后面是读取的参数字符集格式。

而OutputStreamWriter是Writer的子类,是字符流到字节流的桥梁,使用指定的字符集将字符编码为字节,他的字符集可以由名称来指定的也可以接受自定义的默认字符集。

构造方法:

·outputStreamWriter也有两个构造方法,和输入流的换转换流一样的道理。

3.序列化流

而对于序列化机制,使用一个字节序列表示一个对象,该字节序列包含对象对数据等等信息,相当于文件中持久保存了一个对象的信息。

ObjectOutputStream类是将 Java对象的原始数据类型写出到文件实现对象的持久存储。

构造方法:

·ObjectOutoutStream创建一个指定的OutputStream的ObjectOutputStream对象。

创建一个FileOutputStream对象传入到ObjectOutputStream中对该对象写入到指定的FileOutputStream对象中。

序列化操作,必须要满足两个条件,一个是实现Serializable接口,是一个标记接口,如果不实现此接口,将不会进行任何序列化和反序列化操作。

第二个要求是必须要能够序列化,如果有不能够序列化操作的必须注明是瞬态的,使用transient关键词修饰。

这里用到的方法是writeObject将指定对象写出。

而如果要读取一个序列化的文件必须要反序列化,就要用到ObjectInputStream。将序列化对象反序列化,那么用到的readObject方法来进行读取对象。

这里我们要找到对象的.class文件来对对象进行反序列化。这里有个捕获不到异常,那么就会在使用try catch中捕获异常如果没有找到对应的.class文件那么就会输出显示没有找到。

另外还有一种反序列化对象,如果能找到.class文件不能对序列化文件进行修改,如果修改也会操作失败,是序列版本号异常。发生这个异常的原因:

该类的序列号相对于六种读取秒数类的版本号不相同、该类包含未知数据类型、该类没有可访问的无参数构造方法。

Serualizable会对给序列化的类提供一个序列化版本号。serialVersionUID目的在于验证序列化的对象和对应类是否版本匹配。可以在定义要序列化的类中加入版本号。

4.打印流

在PrintStream类中有print和println方法。

构造方法就是PrintStream创建一个新的打印流用指定的文件名。然后通过setOut来改变打印流流向。

上一篇:python的库有多少个?python有多少个模块?


下一篇:解析ArcGis的字段计算器(一)——数值型数据计算,从“面积计算”开始