复制

直接赋值

直接赋值。在 Java 中, A a1 = a2,我们需要理解的是这实际上复制的是引用,也就是说 a1 和 a2 指向的是同一个对象。因此,当 a1 变化的时候, a2 里面的成员变量也会跟着变化。

浅拷贝(复制引用但不复制引用对象)

创建一个新对象,然后将当前对象的非静态字段复制到该新对象, 如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。

  1. class Resume implements Cloneable{
  2. public Object clone() {
  3. try {
  4. return (Resume)super.clone();
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. return null;
  8. }
  9. }
  10. }

深拷贝(复制引用和引用对象)

深拷贝不仅复制对象本身,而且复制对象包含的引用指向的所有对象。

  1. class Student implements Cloneable {
  2. String name;
  3. int age;
  4. Professor p;
  5. Student(String name, int age, Professor p) {
  6. this.name = name;
  7. this.age = age;
  8. this.p = p;
  9. }
  10. public Object clone() {
  11. Student o = null;
  12. try {
  13. o = (Student) super.clone();
  14. } catch (CloneNotSupportedException e) {
  15. System.out.println(e.toString());
  16. }
  17. o.p = (Professor) p.clone();
  18. return o;
  19. }
  20. }

序列化(深拷贝)

将数据对象转换为二进制流的过程就称为对象的序列化(Serialization),反过来,将二进制流转换为对象就是反序列化(Deserializable)。

用途

数据持久化

在很多应用中,需要对好多对象进行序列化,存到物理硬盘,较长时间的保存,比如,Session对象,当有数万用户并发访问的时候,就会有数万的Session对象,内存会承受很大的压力,这个时候,就会把一些对象先序列化到硬盘中,需要使用的时候再还原到内存中。序列化对象要保留充分的信息,用来恢复数据对象,但是为了节约存储空间和网络带宽,序列化出的二进制流要尽可能小。

网络传输

当两个进程在互相通信的时候,就会进行数据传输,不管是何种类型的数据,都必须要转成二进制流来传输,接受方收到后再转为数据对象。

实现方式

java原生序列化

java类通过实现Serializable接口来实现。这个接口没有任何方法,只是标识,java序列化保留了对象的元数据,以及对象数据,兼容性最好,但是不支持跨语言,性能也一般。

Hessian序列化

Hessian序列化是一种支持动态类型、跨语言、基于对象传输的网络协议,java对象序列化后的二进制流,可以被其他语言反序列化。

JSON序列化

JSON是一种轻量级的数据交换格式,这种序列化方式就是讲数据对象转换为JSON字符串。在序列化的过程中舍弃了类型信息。反序列化是只有在提供了类型信息的情况下才能完成。

JAVA复制的更多相关文章

  1. Java: 复制文件最快方法

    利用Java复制文件到处都可以用到,这里总结了一个类供大家参考.里面总共有两个方法: public static boolean copyFile(String srcFileName, String ...

  2. java 复制Map对象(深拷贝与浅拷贝)

      java 复制Map对象(深拷贝与浅拷贝) CreationTime--2018年6月4日10点00分 Author:Marydon 1.深拷贝与浅拷贝 浅拷贝:只复制对象的引用,两个引用仍然指向 ...

  3. java复制文件

    package com.test.tes; import java.io.File; import java.io.FileInputStream; import java.io.FileOutput ...

  4. Java 复制文件的高效方法

    转载自:http://jingyan.baidu.com/article/ff4116259c2d7712e4823780.html 在Java编程中,复制文件的方法有很多,而且经常要用到.我以前一直 ...

  5. java复制文件的4种方式

    尽管Java提供了一个可以处理文件的IO操作类.但是没有一个复制文件的方法.复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候.然而有几种方法可以进行Java文件复制操作,下面列举出4中最 ...

  6. Java复制、移动和删除文件

    复制文件: Files.copy(fromPath,toPath); 例如: Files.copy(Paths.get("E:\\A.txt"), Paths.get(" ...

  7. java 复制对象 (克隆接口 与 序列化)

    关于java对象复制我们在编码过程经常会碰到将一个对象传递给另一个对象,java中对于基本型变量采用的是值传递,而对于对象比如bean传递时采用的是应用传递也就是地址传递,而很多时候对于对象传递我们也 ...

  8. [JAVA]java复制文件的4种方式

    尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...

  9. java复制文件夹及所有子目录和文件

    package text; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; im ...

随机推荐

  1. TDH-search常用命令

    一.指令部分:1.search管理界面地址: http://172.20.230.110:9200/_plugin/head/ 2.集群状态查看命令: curl -XGET 'localhost:92 ...

  2. postman中添加cookie信息

    日常测试中有部分接口请求需要有登录信息,否则调用报错,那如何在postman中添加用户的cookie呢,主要分2个步骤: 第一步: Charles抓包获取Headers信息,拷贝Headers中的Co ...

  3. 安卓,IOS真机调试

    移动端前端开发真机调试攻略 有线调试: 一.IOS 移动端 (Safari开发者工具) 手机端:设置 → Safari → 高级 → Web 检查器 → 开. mac端:Safari → 偏好设置 → ...

  4. aspx页面调用webapi接口报错:远程服务器返回错误:(500)内部服务器错误

    代码在运行到response = (HttpWebResponse)request.GetResponse();就开始报错 原因:可能因为所调用的接口不存在或者接口中存在错误,可用postman测试接 ...

  5. bootstrap警告框、进度条和列表组

    警告框   <div class="container">      <div class="alert alert-success" rol ...

  6. git与GitHub(二)

    昨天在安装完git之后,出了一个问题,虽然暂时有解决的办法,但是由于电脑中了病毒并且配置低下等原因,这个问题的解决办法目前还有待考证.遇到的问题是这样的: 前提是想试一下git在命令行里的命令:于是: ...

  7. JS添加事件和解绑事件:addEventListener()与removeEventListener()

    作用: addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作. 它们都接受3个参数:事件名.事件处理的函数和布尔值. 布尔值参数是true ...

  8. ACCESS中通过一个字段补齐更新另一个字段

    [干货从下面红字开始] 搞了好久的一个问题终于有结果…… 根据学生进出馆的次数和学生报名人数来分配自习间 学生报名是通过工号(学号)来报名的: 而门禁系统统计出来的数据有绝一大部分仅有 卡号没有 工号 ...

  9. spark中产生shuffle的算子

    Spark中产生shuffle的算子 作用 算子名 能否替换,由谁替换 去重 distinct() 不能 聚合 reduceByKey() groupByKey groupBy() groupByKe ...

  10. 快速排序的一种Java实现

    快速排序是笔试和面试中很常见的一个考点.快速排序是冒泡排序的升级版,时间复杂度比冒泡排序要小得多.除此之外,快速排序是不稳定的,冒泡排序是稳定的. 1.原理 (1)在数据集之中,选择一个元素作为&qu ...