第29次(IO流)
学习主题:IO流
学习目标:
1 掌握序列化和反序列化
2 掌握装饰器模式
- 对象流
- 为什么需要序列化?
允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存到磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获得了这种二进制流,就可以恢复成原来的Java的对象。
- 对象的序列化有哪些条件?
- 序列化和反列序列化
- 简述序列化与反序列化的内容?
序列化:用ObjectOutputStream类保存基本类型的数据或对象的机制
反序列化: 用ObjectInputStream类读取基本类型的数据或对象的机制
- 对象序列化的注意事项有哪些?
ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量
- 文件夹的复制
- 文件夹的复制会使用到哪些流?
BuffredInputStream BuffredOutputStream
FileInputStream FileOutputStream
- 简述文件夹复制的过程?
- 提高读取效率,从数据源读取 BufferedInputStream bis=new BufferedInputStream(new FileInputStream(srcFile));
- 提高写入效率,写到目的地 BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(targetFile));
- 边读边写 byte [] buf=new byte[1024]; int len=0; while((len=bis.read(buf))!=-1){bos.write(buf,0,len);}
- 关闭流
bos.close();
bis.close();
- 字节数组流
- 字节数组流的作用?、
- 提高空间利用率
- 压缩内容,在网络上传输时,能有效压缩数据的大小,从而提高效率
- 设计模式_装饰器模式
- 什么是装饰设计模式?举例描述
可以定义类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。
BufferedReader类就是利用这个设计模式,对FileReader类的功能进行了增强。产生新的方法readLine方法。
- 装饰模式的实现细节及优缺点?
优点:
- 装饰类和被装饰类可以独立发展,而不会互相耦合;防止类的爆炸式增长
- 装饰模式是继承关系的一个替代方案,不管装饰多少层,最终返回的也还是那个对象;
- 装饰模式可以动态地扩展一个实现类的功能
缺点:
- 多层的装饰比较复杂,当使用多层装饰出现问题时,排查问题的工作量比较大
第30次(IO流总结和线程初步)
学习主题:IO流总结和线程初步
学习目标:
1 掌握IO流的使用
2 掌握IOUtils和 FileUtils工具类的使用
3 掌握线程初步知识
- IO体系总结
- 画出IO体系结构图
![71b17810be6e95e2cd863321350f721b.png](https://i-blog.csdnimg.cn/blog_migrate/4155d2d56dbab1c409f225ee210d8c81.jpeg)
- 请你例举出IO流中的处理流和节点流?
处理流:ObjectInputStream、DataInputStream、BufferedInputStream、ObjectOutputStream、DataOutputStream、BufferedOutputStream、InputStreamReader、BufferedReader、OutputStreamWriter、PrintWriter、BufferedWriter
节点流:FileInputStream、ByteArrayInputStream、FileOutputStream、ByteArrayOutputStream、FileReader、FileWriter
- Apache IOUtils的使用_Apache FileUtils的使用
- Commons IO的的作用是什么?
Commons IO是Apache的一个开源的工具包,封装了IO操作的相关类,使用Commons IO可以很方便的读写文件。
- IOUtils和FileUtils中有哪些常用的方法?分别代表什么意思?
IOUtils工具类的方法
- buffer方法:将传入的流进行包装,变成缓冲流。并可以通过参数指定缓冲大小。
- closeQueitly方法:关闭流。
- contentEquals方法:比较两个流中的内容是否一致。
- copy方法:将输入流中的内容拷贝到输出流中,并可以指定字符编码。
- copyLarge方法:将输入流中的内容拷贝到输出流中,适合大于2G内容的拷贝。
- lineIterator方法:返回可以迭代每一行内容的迭代器。
- read方法:将输入流中的部分内容读入到字节数组中。
- readFully方法:将输入流中的所有内容读入到字节数组中。
- readLine方法:读入输入流内容中的一行。
- toBufferedInputStream,toBufferedReader:将输入转为带缓存的输入流。
- toByteArray,toCharArray:将输入流的内容转为字节数组、字符数组。
- toString:将输入流或数组中的内容转化为字符串。
- write方法:向流里面写入内容。
- writeLine方法:向流里面写入一行内容。
- 多线程基本概念_程序_进程_线程
- 什么是程序、进程和线程?
程序:Program是一个指令的集合
进程:Process(正在执行的程序)是一个静态的概念,进程是程序的一次静态的执行过程,占用特定的地址空间,每个进程都是独立的,由3部分组成cpu,data,code。
线程:是进程中一个“单一的连续控制流程”
- 进程与线程之间区别?
定义的不同
进程是资源的分配单位
线程是调度和执行的单位
内存地址的不同
进程是内存与地址之间的切换
线程是在同一地址上进行的
所处环境不同
进程在操作系统同中能同时运行多个任务
线程在同一应用程序中有多个顺序流同时执行
内存分配不同
进程:系统在运行时会为每个进程分配不同的内存区域
线程:除CPU外,不会为线程分配内存,线程组只能共享内存
运行不同
一个进程包含多个线程,如果线程结束,进程不一定结束。
进程结束,线程都将结束
- 通过继承Thread类实现多线程
- 简述通过继承Thread类实现多线程的步骤?
- 继承Thread类
- 重写run()方法
- 通过start()方法启动线程
- 继承Thread类实现多线程的缺点是什么?
Java中的类是单继承的,一旦继承了Thread类,就不允许再去继承其他的类。
- 通过实现接口Runnable实现多线程
- 简述使用Runnable接口实现多线程的步骤?
- 编写类实现Runnable接口
- 实现run()方法
- 通过Thread类的start方法启动线程
- 简述代理设计模式?
Thread 代理角色
MyRunnable真实角色
代理角色和真实角色实现共同的接口Runnable接口
- 线程状态
- 线程有哪几种状态?
新生状态 就绪状态 运行状态 阻塞状态 终止状态
- 请你画出线程的生命周期图
![13ffb04a88fca757008ca68286b48b1a.png](https://i-blog.csdnimg.cn/blog_migrate/c189efd214c72ed629243151b09919a3.jpeg)