- 对象流
(1) 为什么需要序列化?
答:序列化以后的对象可以保存到磁盘上,也可以在网络上传输,是的不同的计算机可以共享对象(序列化的字节序列是平台无关的)。
(2) 对象的序列化有哪些条件?
答:只有了实现了Serializable接口的类的对象才可以被序列化,Serializable接口中没有任何的方法,实现该接口的类不需要实现额外的方法。对过对象的属性是对象,属性对应类也必须实现Serializable接口。。
2. 序列化和反列序列化
(1) 简述序列化与反序列化的内容?
答:1)序列化能保存
2)使用对象流把一个对象写道文件时不仅保证该对象是序列化的,而且该对象的成员对象也必须是可序列化的。
3)如果一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableExceprion异常。我们将这个引用标记为tansient,那么对象依旧可以序列化
(2) 对象序列化的注意事项有哪些?
答:同一个对象多次序列化处理
1) 所有保存到磁盘中的对象都有一个序列化编号
2) 序列化一个对象中,首先检查该对象是否已经序列化过
3) 如果没有,进行序列化
4) 如果已经序列化,将不再重新序列化,二十输出编号
如果不希望某些属性序列化,或不惜黄出现递归序列
1) 为属性添加tansient关键字(完成排序在序列化之外)
2) 自定义序列化(不仅可以决定那些书信不参加序列化,还可以定义属性具体如何序列化)
序列化版本不兼容
1) 修改了实例属性后,会影响版本号,从而导致反序列化不成功
2) 为Java对象指定序列化版本号serialVersionUID
3. 文件夹的复制
(1) 文件夹的复制会使用到哪些流?
答:字节流:BufferedInputStream/BufferedOutputStream
FileInputStream/FileOutputStream:数据源与目的地都为文件,且文件格式不是纯文本,所有选用字节流
(2) 简述文件夹复制的过程?
1首先判断目标文件夹是存在,若不存在则创建文件夹
2获取该目录下的所有文件
3在循环遍历文件时,判断这是不是一个文件,若为文件则将此文件复制到目标文件所对应的目录下(注意拼接时文件名应相同),若不是 ,则递归调用自己。
4. 字节数组流
(1) 字节数组流的作用?
答:提高空间利用率
压缩内容,在网络传输时,能有效压缩传输数据的大小,从而提高效率
5. 设计模式_装饰器模式
(1) 什么是装饰设计模式?举例描述
答:装饰模式是一种用于替代继承的技术,无序通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。
(2) 装饰模式的实现细节及优缺点?
答:优点:1)扩展对象功能,比继承灵活。不会导致类个数急速增加
2)具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构建子类和具体修饰子类
3) 可以对一个对象进行多次装饰,创建出不同行为的组合,得到功能更加大的对象
缺点:1)产生很多小对象,大量小对象占据内存,一定程序上影响性能
2)修饰模式容易出错,调式排查比较麻烦