知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

学无止境之小白学java……第015天

发表时间:2022-03-25来源:网络

学习主题:IO流

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应作业

1. 对象流

(1) 为什么需要序列化?

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

(2) 对象的序列化的条件

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

2. 序列化和反列序列化

(1) 简述序列化与反序列化的内容

1) 序列化能保存的元素

a) 只能保存对象的非静态成员变量b) 不能保存任何成员方法和静态的成员变量c) 不保存 transient 成员变量d) 如果一个对象的成员变量是一个对象,这个对象的成员变量也会保存e) 串行化保存的只是变量的值,对于变量的任何修饰符,都不能保存

2) 使用对象流把一个对象写到文件时不仅保证该对象是序列化的,而且该对象的成员对象也必须是可序列化的。

3) 如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。我们可以将这个引用标记为transient,那么对象仍然可以序列化。

(2) 对象序列化的注意事项

1) 同一个对象多次序列化的处理

a) 所有保存到磁盘中的对象都有一个序列化编号b) 序列化一个对象中,首先检查该对象是否已经序列化过c) 如果没有,进行序列化d) 如果已经序列化,将不再重新序列化,而是输出编号即可

2) 如果不希望某些属性(敏感)序列化,或不希望出现递归序列

a) 为属性添加 transient 关键字(完成排除在序列化之外)b) 自定义序列化(不仅可以决定哪些属性不参与序列化,还可以定义属性具体如何序列化)

3) 序列化版本不兼容

a) 修改了实例属性后,会影响版本号,从而导致反序列化不成功b) 解 决 方 案 : 为 Java 对 象 指 定 序 列 化 版 本 号 serialVersionUID

3. 文件夹的复制

(1) 文件夹的复制会使用到的流

BufferedInputStreamBufferedOutputStreamFileInputStreamFileOutputStream

(2) 简述文件夹复制的过程

1、 复制一个文件2、 指定目录下的所有文件3、 指定目录下的所有文件及子目录下的所有文件4. 字节数组流

(1) 字节数组流的作用

提供计算机之间的交互,交互方式就是字节数组流

5. 设计模式_装饰器模式

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

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

(2)列举出IO流中的处理流和节点流

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

处理流:BufferInputStream、BufferOutputStream、BufferReader、BufferWriter、InputStreamReader、OutputStreamWriter、ObjectInputStream、ObjectOutputStream、DataInputStream、DataOutputStream、printStream、PrintWriter

7. Apache IOUtils的使用_Apache FileUtils的使用

(1) Commons IO的作用

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

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

IOUtils的常用方法:

String IOUtils.toString(InputStream input)传入输入流对象返回字符串

FileUtils的常用方法:

(1)String FileUtils.readFileToString(File file,String encoding)读文件(2)String FileUtils.writeFileToFile(File file,String data,String encoding)写文件 (3)FileUtils.copyFile(File srcFile,File destFile)复制文件(4)FileUtils.copyURLToFile(URL source,File destination)复制url对象到指定文件

8. 多线程基本概念_程序_进程_线程

(1) 程序:program,是一个指令的的集合

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

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

(2) 进程与线程之间区别

1、 一个进程可以拥有多个并行的线程2、 一个进程中的线程可以共享相同的内存单元/内存地址空间,可以访问相同的变量和对象,而且他们从一堆中分配对象,,,通信,数据交换,同步操作3、 由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而且信息传递的速度也更快。

9. 通过继承Thread类实现多线程

(1) 简述通过继承Thread类实现多线程的步骤

1、 继承Thread类2、 重写run()方法3、 通过start()方法启动线程package cn.sxt.thread; public class MyThread2 extends Thread{ @Override public void run() { //线程体 for(int i=0;i

(2) 继承Thread类实现多线程的缺点

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

10. 通过实现接口Runnable实现多线程

(1) 简述使用Runnable接口实现多线程的步骤

1、 编写类实现Runnable接口2、 实现run()方法3、 通过Thread类的start()方法启动线程public class MyRunnable implements Runnable{//具备了多线程操作的能力 @Override public void run() { for(int i=0;i

(2) 简述代理设计模式

Thread 代理角色

MyRunnable真实角色

代理角色与真实角色实现共同的接口Runable接口

举个例子:

public interface Marry { //结婚的方法 void Marry(); } public class MarryCompany implements Marry{ //婚庆公司给准备结婚的人准备婚礼。。。。 private Marry m; public MarryCompany(Marry m) { this.m=m; } public void after(){ System.out.println("收拾东西........"); } public void before(){ System.out.println("婚礼前的准备工作......."); } @Override public void Marry() { this.before(); m.Marry();//调用真实角色的结婚的方法 this.after(); } } public class You implements Marry{// 真是角色 @Override public void Marry() { System.out.println("你与XXX结婚了"); } } public class TestMarry { public static void main(String[] args) { //创建真是角色对象 Marry y = new You(); //创建代理角色 Marry myc = new MarryCompany(y); myc.Marry(); } }
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜