复制内存时检测到可能的io争用条件_IO流与线程学习分享

第29次(IO流)

学习主题:IO流

学习目标:

1 掌握序列化和反序列化

2 掌握装饰器模式

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

允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存到磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获得了这种二进制流,就可以恢复成原来的Java的对象。

  1. 对象的序列化有哪些条件?
  1. 序列化和反列序列化
    1. 简述序列化与反序列化的内容?

序列化:用ObjectOutputStream类保存基本类型的数据或对象的机制

反序列化: 用ObjectInputStream类读取基本类型的数据或对象的机制

  1. 对象序列化的注意事项有哪些?

ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量

  1. 文件夹的复制
    1. 文件夹的复制会使用到哪些流?

BuffredInputStream BuffredOutputStream

FileInputStream FileOutputStream

  1. 简述文件夹复制的过程?
  1. 提高读取效率,从数据源读取 BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcFile));
  2. 提高写入效率,写到目的地 BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(targetFile));
  3. 边读边写 byte [] buf=new byte[1024]; int len=0; while((len=bis.read(buf))!=-1){bos.write(buf,0,len);}
  4. 关闭流

bos.close();

bis.close();

  1. 字节数组流
    1. 字节数组流的作用?、
  1. 提高空间利用率
  2. 压缩内容,在网络上传输时,能有效压缩数据的大小,从而提高效率
  1. 设计模式_装饰器模式
    1. 什么是装饰设计模式?举例描述

可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。

BufferedReader类就是利用这个设计模式,对FileReader类的功能进行了增强。产生新的方法readLine方法。

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

优点:

  1. 装饰类和被装饰类可以独立发展,而不会互相耦合;防止类的爆炸式增长
  2. 装饰模式是继承关系的一个替代方案,不管装饰多少层,最终返回的也还是那个对象;
  3. 装饰模式可以动态地扩展一个实现类的功能

缺点:

  1. 多层的装饰比较复杂,当使用多层装饰出现问题时,排查问题的工作量比较大

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

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

学习目标:

1 掌握IO流的使用

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

3 掌握线程初步知识

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

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

处理流:ObjectInputStream、DataInputStream、BufferedInputStream、ObjectOutputStream、DataOutputStream、BufferedOutputStream、InputStreamReader、BufferedReader、OutputStreamWriter、PrintWriter、BufferedWriter

节点流:FileInputStream、ByteArrayInputStream、FileOutputStream、ByteArrayOutputStream、FileReader、FileWriter

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

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

  1. IOUtils和FileUtils中有哪些常用的方法?分别代表什么意思?

IOUtils工具类的方法

  1. buffer方法:将传入的流进行包装,变成缓冲流。并可以通过参数指定缓冲大小。
  2. closeQueitly方法:关闭流。
  3. contentEquals方法:比较两个流中的内容是否一致。
  4. copy方法:将输入流中的内容拷贝到输出流中,并可以指定字符编码。
  5. copyLarge方法:将输入流中的内容拷贝到输出流中,适合大于2G内容的拷贝。
  6. lineIterator方法:返回可以迭代每一行内容的迭代器。
  7. read方法:将输入流中的部分内容读入到字节数组中。
  8. readFully方法:将输入流中的所有内容读入到字节数组中。
  9. readLine方法:读入输入流内容中的一行。
  10. toBufferedInputStream,toBufferedReader:将输入转为带缓存的输入流。
  11. toByteArray,toCharArray:将输入流的内容转为字节数组、字符数组。
  12. toString:将输入流或数组中的内容转化为字符串。
  13. write方法:向流里面写入内容。
  14. writeLine方法:向流里面写入一行内容。
  15. 多线程基本概念_程序_进程_线程
    1. 什么是程序、进程和线程?

程序:Program是一个指令的集合

进程:Process(正在执行的程序)是一个静态的概念,进程是程序的一次静态的执行过程,占用特定的地址空间,每个进程都是独立的,由3部分组成cpu,data,code。

线程:是进程中一个“单一的连续控制流程”

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

定义的不同

进程是资源的分配单位

线程是调度和执行的单位

内存地址的不同

进程是内存与地址之间的切换

线程是在同一地址上进行的

所处环境不同

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

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

内存分配不同

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

线程:除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. 简述代理设计模式?

Thread 代理角色

MyRunnable真实角色

代理角色和真实角色实现共同的接口Runnable接口

  1. 线程状态
    1. 线程有哪几种状态?

新生状态 就绪状态 运行状态 阻塞状态 终止状态

  1. 请你画出线程的生命周期图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值