`
249009188
  • 浏览: 47678 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java面试的常见io操作 ~ 深拷贝

io 
阅读更多

 

  java的clone方法实现的是浅拷贝,如果被拷贝的object里面有子object,子object有孙object。。。的话,这些object的内容就消失了。

除非你对每个子/孙的object的clone方法都重载。当然这东西太2b,人类都不这么玩的。

       最简单的实现方式是使用ByteArrayOutputStream和ByteArrayInputStream()来将一个object转换成byte流变换。先将它write到输出流,再重输入流read。实现它内容的拷贝。

 

package com.interview.scoop;

 

 

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.util.Stack;

 

public class DeepClone {

    public static void main(String[] args) {

        Stack<Integer> s = new Stack<Integer>();

        for(int i = 0; i < 3; i++) {

            s.push(i);

        }

        @SuppressWarnings("unchecked")

        Stack<Integer> b = (Stack<Integer>) DeepClone.copy(s);

        int size = b.size();

        for(int i = 0; i < size; i++) {

            System.out.println(b.pop());

        }

    }

    public static Object copy(Object oldObj) {

        Object o = null;

       //Used to carry the output

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        try {

             // Used to method output

            ObjectOutputStream oos = new ObjectOutputStream(bos);

            // Write object to the container

            oos.writeObject(oldObj);

            // flush is not necessities

            oos.flush();

            oos.close();

            // container, give the object to it, which will be translate to stream

            ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());

           // tool

            ObjectInputStream ois = new ObjectInputStream(bis);

            try {

                // read target and get an object

                o = ois.readObject();

            } catch (ClassNotFoundException e) {

                e.printStackTrace();

            }

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

                return o;

        }

    } 

}

分享到:
评论

相关推荐

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题63:怎么操作linux服务器.mp4 │ Java面试题64:有没有使用过云主机.mp4 │ Java面试题65:数据库优化方面的事情.mp4 │ Java面试题66:如果查询和定位慢查询.mp4 │ Java面试题67:数据库优化之数据库...

    JAVA面试常见题型全集

    这个"JAVA面试常见题型全集"很可能是为了帮助应聘者准备面试而设计的资料集合。以下将根据标题和描述,结合Java语言的核心概念、面试常问问题及重要知识点进行深入阐述。 一、Java基础 1. Java语言特性:理解面向...

    Java面试资料之IO相关

    在 Object 基类中,有一个方法叫 clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分,若克隆对象中存在引用类型的属性深克隆会将此属性完全拷贝一份,而浅克隆仅仅...

    java面试题包含近十套面试经典题

    Java作为一门广泛使用的编程语言,其面试题涵盖了众多的知识领域,包括但不限于基础语法、...这些是Java面试中常见的主题,对于准备面试的开发者来说,熟练掌握这些知识点并能够灵活运用,将极大地提高面试成功的机会。

    JAVA常见面试题

    以下是一些Java面试中常见的问题及其解析: 1. **基础语法** - 什么是Java的三大特性?(封装、继承、多态) - Java中的访问修饰符有哪些?(public、private、protected、默认) - Java中的四种基本数据类型是...

    阿里面试(java)

    在准备阿里面试的过程中,Java开发者...通过阅读“阿里Java面试要点+以往题目.doc”文档,你可以更具体地了解面试的侧重点,针对性地进行复习和准备。在实践中不断应用和巩固这些知识,将有助于你在面试中脱颖而出。

    Java面试笔试常见题目

    Java作为一门广泛使用的编程...以上内容是Java面试笔试中常见的重点知识,熟练掌握这些知识点对于Java程序员来说至关重要。在准备面试时,不仅要理解概念,还要通过实践加深理解,以便在面试中能够灵活应对各种问题。

    java面试100题,包含java基础等

    Java 中的访问修饰符、运算符、垃圾回收机制、自动装箱和自动拆箱、类加载机制、异常层次结构、接口和抽象类、内部类、深拷贝和浅拷贝、String、StringBuilder 和 StringBuffer、集合框架、泛型、反射、注解、并发...

    Java面试突击版1

    Java面试突击版1主要聚焦于Java基础知识、集合、多线程和JVM相关的面试知识点,同时也涉及面试准备、简历撰写技巧以及对大厂面试的关注点。以下是对这些内容的详细阐述: 1. **面向对象与面向过程的区别**: - ...

    10万字208道Java经典面试题总结(附答案).pdf

    深拷贝和浅拷贝分别拷贝对象本身和引用。 16. **throw和throws**:throw用于抛出异常,而throws用于声明方法可能抛出的异常。 17. **final、finally、finalize的区别**:final修饰变量表示不可变,修饰类和方法...

    2013 java面试大典

    Java是一种广泛使用的面向对象的编程语言,其面试题库涵盖...以上知识点只是Java面试中的一部分,完整的Java面试准备还需要涵盖更多主题,如多线程、集合框架、异常处理、IO流、设计模式、JVM内存模型、数据库操作等。

    Java常见200道面试题汇总

    为了在面试中脱颖而出,了解并掌握常见的Java面试题至关重要。本篇文章汇总了200道Java面试题,涵盖了从基础到高级的各个层面,包括Java基础、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、设计...

    西安嘉辰Java面试宝典(2021).pdf

    Java是一种广泛使用的编程语言,尤其在企业级应用中占据重要地位。面试中,Java开发者常常会面临各种技术问题,从基础...以上只是Java面试中部分常见的问题和知识点,全面掌握Java技术栈需要深入学习并实践更多内容。

    2019最新Java面试题,常见面试题及答案汇总.pdf

    这份2019年的Java面试题集包含了从基础到高级的各类问题,旨在全面评估候选人的技能水平。以下是对其中一些关键知识点的详细解释: 1. **JDK和JRE的区别**:JDK(Java Development Kit)是Java开发工具包,包含...

    2019最新Java面试题,常见面试题及答案汇总说课材料.pdf

    以下是对2019年最新Java面试题的详细解答和解析: 1. **JDK和JRE的区别**:JDK(Java Development Kit)是Java开发工具包,包含了编译器、调试器等开发工具以及JRE;JRE(Java Runtime Environment)则是Java运行...

    java面试考题大全

    以上只是部分Java面试中的常见知识点,实际的面试题可能会更深入,包括设计模式、JVM优化、数据库操作、Spring框架、微服务等相关技术。在准备面试时,不仅要理解这些概念,还要能够灵活应用到实际问题中,以展示...

    JAVA面试八股文JAVA面试八股文

    Java面试中的"八股文"通常指的是面试中经常被问到的经典问题,这些问题涵盖了Java语言的基础、并发编程、集合框架等多个方面。以下是一些重要的Java面试知识点: 1. **String, StringBuffer, StringBuilder的区别**...

    JAVA面试手册、Java面经+Java后端开发+实习+应届生求职面试

    序列化用于持久化对象,深拷贝和浅拷贝涉及对象复制的层次。 12. **集合类**:ArrayList、LinkedList、HashSet、HashMap等集合类各有优缺点,适用于不同的场景。例如,ArrayList适合随机访问,LinkedList适合插入...

    2022最新Java面试题常见面试题与答案汇总0001.pdf

    3. 浅拷贝只复制对象引用,深拷贝复制对象及引用的对象。 六、JavaWeb 1. JSP是视图,Servlet是控制器,JSP负责展示,Servlet处理请求。 2. JSP内置对象包括page、request、response、session、application等,分别...

Global site tag (gtag.js) - Google Analytics