多线程处理文件夹下的xml_java015-IO流、多线程

第29次(IO流)

学习主题:IO流

学习目标:

1 掌握序列化和反序列化

2 掌握装饰器模式

  1. 对象流
    1. 为什么需要序列化?

序列化以后的对象可以保存到磁盘上,也可以在网络上传输,使得不同的计算机可以共享对象。(序列化的字节序列是与平台无关的)。

  1. 对象的序列化有哪些条件?

只有实现了Serializable接口的类的对象才可以被序列化。Serializable接口中没有任何的方法,实现该接口的类不需要实现额外的方法。

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

  1. 序列化和反列序列化
    1. 简述序列化与反序列化的内容?
  1. 序列化能保存的元素
  2. 只能保存对象的非静态成员变量
  3. 不能保存任何成员方法和静态的成员变量
  4. 不能保存transient成员变量
  5. 如果一个对象的成员变量是一个对象,这个对象的成员变量也会保存
  6. 串行化保存的只是变量的值,对于变量的任何修饰符,都不能保存
  7. 使用对象流把一个对象写到文件时不仅保证该对象是序列化的,而且该对象的成员对象也必须是可序列化的。
  8. 如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引用标记transient,那么对象仍然可以序列化。
  1. 对象序列化的注意事项有哪些?
  1. 同一个对象多次序列化的处理
  2. 所有保存到磁盘中的对象都有一个序列化编号
  3. 序列化一个对象中,首先检查该对象是否已经序列化过
  4. 如果没有,进行序列化
  5. 如果已经序列化,将不再重新序列化,而是输出编号即可
  6. 如果不希望某些属性(敏感)序列化,或不希望出现递归序列
  7. 为属性添加transient关键字(完成排除在序列化之外)
  8. 自定义序列化(不仅可以决定哪些属性不参与序列化,还可以定义属性具体如何序列化)
  9. 序列化版本不兼容
  10. 修改了实例属性后,会影响版本号,从而导致反序列化不成功
  11. 解决方案:为Java对象指定序列化版本号serialVersionUID
  1. 文件夹的复制
    1. 文件夹的复制会使用到哪些流?

BufferedInputStream、BufferedOutputStream

FileInputStream、FileOutputStream

    1. 简述文件夹复制的过程?
  1. 指定要复制的文件夹目录和要复制的目标目录
  2. 遍历源文件夹下的所有文件/目录
  3. 遍历到的如果是文件,将该文件复制到目标目录下,如果是目录,将该子目录作为源文件夹,目标目录下创建与该子目录同名的目录作为目标目录,执行第二步。
  4. 遍历结束。
  5. 字节数组流
    1. 字节数组流的作用?

在网络上两台计算机进行互相交流通信的时候,传递的就是字节。用字节数组流可以将各种数据类型转为byte类型。

  1. 设计模式_装饰器模式
    1. 什么是装饰设计模式?举例描述

职责:动态的为一个对象增加新的功能

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

根据需求,为Car添加新功能:

70d9d2c7724d25b3a989f945e1987c5c.png
    1. 装饰模式的实现细节及优缺点?

实现细节:

  1. 抽象构件角色 ICar
  2. 具体的构件角色 Car
  3. 装饰器角色 SuperCar
  4. 具体的装饰器角色 FlyCar、WaterCar、AICar

优点:

  1. 扩展对象功能,比继承灵活,不会导致类个数急剧增加
  2. 可以对一个对象进行多次装饰,创建出不同行为的组合,得到功能更加强大的对象
  3. 具体构建类和具体装饰类可以独立变化,用户可以根据自己需要自己增加新的具体构件子类和具体装饰子类

缺点:

  1. 产生很多小对象。大量小对象占据内存,一定程度上影响性能
  2. 装饰模式易于出错,调试排查比较麻烦

第30次(IO流总结和线程初步)

学习主题:IO流总结和线程初步

学习目标:

1 掌握IO流的使用

2 掌握IOUtils和 FileUtils工具类的使用

3 掌握线程初步知识

  1. IO体系总结
    1. 画出IO体系结构图

5df81f5ed0b3c32a4a506fb04b378d19.png

d275f445fb8dbac06f7da64e6eaf14a7.png
  1. 请你例举出IO流中的处理流和节点流?

处理流:

缓冲流 BuferedInputStream、BufferedOutStream、BufferedReader、BufferedWriter

打印流 PrintStream、PrintWriter

对象流 ObjectInputStream、ObjectOutputStream

转换流 InputStreamReader、OutputStreamReader

节点流L:

文件流 FileInputStream、FileOutputStream、FileReader、FileWriter

字节数组流 ByteArrayInputStream、ByteArrayOutputStream

  1. Apache IOUtils的使用_Apache FileUtils的使用
    1. Commons IO的的作用是什么?

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

  1. FileUtils中提供了许多涉及文件操作的已封装好的方法。
  2. IOUtils则是提供了读写文件的方法
    1. IOUtils和FileUtils中有哪些常用的方法?分别代表什么意思?

IOUtils:

  1. toString(InputStream ) 读取文件内容
  2. write(String,OutputStream) 写数据
  3. copy(InputStream, OutputStream) 复制文件中的内容

FileUtils:

  1. openInputStream(File) 获取FileInputStream类型的对象
  2. toFile(URL) 将URL转为File
  3. copyFileToDirectory(File,File) 将文件拷贝到指定目录
  4. copyFile(File, File) 拷贝文件
  5. copyURLToFile(URL, File) 将提供的URL地址里的数据拷贝到文件
  6. readFileToString(File) 读取文件内容,得到String类型
  7. writeStringToFile(File, String) 将字符串写入文件
  8. 多线程基本概念_程序_进程_线程
    1. 什么是程序、进程和线程?

程序:是一个指令的集合

进程:(正在执行的程序)是一个静态的概念

进程是程序的一次静态执行过程,占用特定的空间。

每个进程都是独立的,由3部分组成cpu、data、code

线程:是进程中一个“单一的连续控制流程 ”/执行路径线程又被称为轻量级进程

  1. 进程与线程之间区别?

区别

进程

线程

根本区别

作为资源分配的单位

调度和执行的单位

开销

每个进程都有独立的代码和数据空间(进程上下文),进程空间的切换会有较大的开销。

线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。

所处环境

在操作系统中能同时运行多个任务(程序)

在同一应用程序中有多个顺序流同时执行

分配内存

系统在运行的时候会为每个进程分配不同的内存区域

除了CPU之外,不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源

  1. 通过继承Thread类实现多线程
    1. 简述通过继承Thread类实现多线程的步骤?
  1. 继承Thread类
  2. 重写run()方法
  3. 通过start()方法启动线程
    1. 继承Thread类实现多线程的缺点是什么?

java中的类是单继承的,一旦继承了Thread类,就不允许再去继承其他的类。

  1. 通过实现接口Runnable实现多线程
    1. 简述使用Runnable接口实现多线程的步骤?
  1. 编写类实现Runnable接口
  2. 实现run()方法
  3. 通过Thread类的start()方法启动线程
    1. 简述代理设计模式?

代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象

  1. 线程状态
    1. 线程有哪几种状态?
  1. 新生状态
  2. 就绪状态
  3. 运行状态
  4. 阻塞状态
  5. 终止状态/死亡状态
    1. 请你画出线程的生命周期图

bc99b7fb2e7d9c1f37da1f5da1d66f45.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值