美文网首页
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流

    一、序列化和反序列化: 1.对象流: 能够对对象进行读写操作的处理流。 (1)ObjectInputStream(...

  • Java IO 节点流和字符流 学习 + 案例分析

    Java IO 节点流和字符流 学习 + 案例分析

  • Java的IO & NIO

    IO流学习总结一Java IO,硬骨头也能变软二java IO体系的学习总结三Java IO面试题 NIO与AIO...

  • Java之IO流详解

    title: Java之IO流详解tags: Java IO流categories: Java IO流 大多数应用...

  • Java学习总结之Java IO系统(二)

    本文接着Java学习总结之Java IO系统(一),我们继续总结Java IO系统的相关知识。 字符流(Write...

  • Java IO 笔记

    学习Java中的IO,首先要理解Java中IO的流模型。所谓流,可以假想成河流,流的数据源,就是河流的发源地,流是...

  • Java学习-IO流

    title: IO流date: 2020-02-02 21:51:26tags:-IO流categories: J...

  • java IO、NIO、AIO

    IO流(同步、阻塞) 、 NIO(同步、非阻塞) 、 NIO2(异步、非阻塞) 概述在我们学习Java的IO流之前...

  • 从0开始复习java(9)--IO

    Java的io通过java.io包下的类和接口支持。主要有输入、输出流,又分为字节流和字符流。Java的io流使用...

  • java IO入门笔记

    1.java IO流的概念,分类,类图 1.1. java IO 流的概念 java的io是实现输入和输出的基础,...

网友评论

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

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