美文网首页
Java学习day-19-1:IO流

Java学习day-19-1:IO流

作者: 开源oo柒 | 来源:发表于2019-08-01 23:39 被阅读0次

    一、序列化和反序列化:

    1.对象流:

    能够对对象进行读写操作的处理流。

    (1)ObjectInputStream(Object输出流):

    ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。

    构造方法:

    1)ObjectInputStream():为完全重新实现 ObjectInputStream 的子类提供一种方式,让它不必分配仅由 ObjectInputStream 的实现使用的私有数据。

    2) ObjectInputStream(InputStream in):创建从指定 InputStream 读取的 ObjectInputStream。

    常用方法:

    1)readInt(): 读取一个 32 位的 int 值。

    2)readObject():从 ObjectInputStream 读取对象。

    3)readDouble():读取一个 64 位的 double 值。

    4)readBoolean():  读取一个 boolean 值。

    5)close():关闭输入流。

    (2)ObjectOutputStream(Object输入流):

    ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。

    构造方法:

    1)ObjectOutputStream():为完全重新实现 ObjectOutputStream 的子类提供一种方法,让它不必分配仅由 ObjectOutputStream 的实现使用的私有数据。

    2)ObjectOutputStream(OutputStream out) : 创建写入指定 OutputStream 的 ObjectOutputStream。

    常用方法:

    1)writeObject(Object obj):将指定的对象写入 ObjectOutputStream。

    2)writeUTF(String str):以 UTF-8 修改版格式写入此 String 的基本数据

    3)flush():刷新该流的缓冲。

    4)close(): 关闭流。

    代码截图 结果

    2.序列化:

    ObjectOutputStream --->序列化 --->写对象 , 将对象以 “二进制/字节”的形式写到文件。

    (1)实现序列化:

    1)创建 ObjectOutputStream 对象;

    2)调用 writeObject()输出对象。

    (2)实现序列化的条件:

    1)只有实现了 Serializable 接口的类的对象才可以被序列化。

    2)如果对象的属性是对象,属性对应类也必须实现 Serializable接口。

    (3)注意:

    1)static属性不参与序列化。

    2)对象中的某些属性如果不想被序列化,不能使用static,而是使用transient修饰。

    3)为了防止读和写的序列化ID不一致,一般指定一个固定的序列化ID。

    3.反序列化:

    ObjectInputStream---->反序列化---->读对象。

    1)创建 ObjectInputStream 对象;

    2)调用 readObject()读取对象;

    代码截图 结果

    4.文件夹的复制:

    (1)文件夹复制:

    1)复制文件夹使用递归。

    2)文件的复制。

    (2)实现过程:

    创建文件复制的方法:

    1) 创建输入流;

    2) 创建输出流;

    3) 创建缓存区;

    4) 关闭流;

    创建文件夹复制的方法:

    1) 判断目标文件夹是否存在,如果不存在创建文件夹;

    2) 获取源目录中的子文件和子文件夹及名字;

    3) 对获取的子文件和文件进行判断;

    4) 如果是文件调用文件复制的方法;

    5) 如果是文件夹则使用递归继续执行复制文件夹的方法;

    代码截图

    二、IOUtils和FileUtils

    Commons IO 是 是 apache 的一个开源的工具包, 封装了 IO操作的相关类, 使用 Commons IO 可以很方便的读写文件。

    1.IOUtils:

    IOUtils 则是提供了读写文件的方法。

    常用方法:

    1)String IOUtils.toString(InputStream input):传入输入流对象返回字符串;

    2) readLine方法:读入输入流内容中的一行。

    3) toString:将输入流或数组中的内容转化为字符串。

    4)writeLine方法:向流里面写入一行内容。

    2.FileUtils:

    FileUtils 中提供了许多设计文件操作的 已封装好的方法。

    常用方法:

    1)FileUtils.copyFile(File srcFile,File destFile)复制文件。

    2) copyDirectory:将一个目录内容拷贝到另一个目录。可以通过FileFilter过滤需要拷贝的文件。

    3)FileUtils.copyURLToFile(URL source,File destination)复制url 对象到指定文件。

    4) readlines方法:将文件内容按行返回到一个字符串数组中。

    代码截图 结果

    三、设计模式_装饰器模式:

    1.装饰器模式:

    装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。

    (1)优点:

    1) 扩展对象功能,比继承灵活,不会导致类个数急剧增加;

    2) 可以对一个对象进行多次装饰,创建出不同行为的组合,得到功能更加大的对象。

    3) 具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构件子类和具体装饰子类。

    (2)缺点:

    1) 产生很多小对象。大量小对象占据内存,一定程序上影响性能。

    2) 装饰模式易于出错,调试排查比较麻烦。

    代码截图 结果

    四、IO体系总结:

    1.按流的方向分类:

    1) 输入流:数据源到程序(InputStream、Reader读进来)。

    2) 输出流:程序到目的地(OutPutStream、Writer写出去)。

    2. 按流的处理数据单元分类:

    1)字节流:按照字节读取数据(InputStream、OutputStream)。

     2)  字符流:按照字符读取数据(Reader、Writer)。

    3. 按流的功能分类:

    1) 节点流:可以直接从数据源或目的地读写数据。

    2) 处理流:不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。

    4.IO流体系:

    (1) 字节流 :InputStream,OutputStream;

    (2)字符流:Reader ,Writer;

    (3)数据流:DataInputStream,DataOutputStream;

    (4)对象流:ObjectInputStream,ObjectOutputStream;

    (5)缓冲流:BufferedInputStream,BufferedOutputStream / BufferedReader,BufferedWriter;

    (6) 转换流:InputStreamReader,OutputStreamWriter;

    (7) 数组流:ByteArrayInputStream,ByteArrayOutputStream;

    (8)打印流:PrintStream,PrintWriter;

    相关文章

      网友评论

          本文标题:Java学习day-19-1:IO流

          本文链接:https://www.haomeiwen.com/subject/yeshdctx.html