Java学习day-19-1:IO流

一、序列化和反序列化:

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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342