纪念SUN

Powered By Andy

2011年11月18日

package cn.xx

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * <pre>
 * @Types   role : 测试clone

 * @Create  time : 2011-12-26 : 上午10:49:39
 * @ver     curr : 1.0
 * </pre>
 */
public class TestClone implements Serializable{

    private static final long serialVersionUID = -7340886443308126418L;

    /**
     * <pre>
     * @Methods role : 对象的Clone
     * 注: 要clone对象必须要实现Serializable接口, 不然抛NoSerializableException
     * </pre>
     * @param obj
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     * @Create  time : 2011-12-23 : 下午5:26:57
     * @ver     curr : 1.0
     */
    @SuppressWarnings("unchecked")
    public static <T> T invokeCopy(T obj) throws IOException, ClassNotFoundException{
        //T newObj = null;
        // write object to memory
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(obj);
        oos.flush();
        
        // read object come from memory
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        //newObj = (T)ois.readObject();
        
        //bis.close();
        //oos.close();
        // return clone object
        return (T)ois.readObject();
        
        
    }
    
    /**
     * <pre>
     * @Methods role : 实现对象的clone
     * 两种方案(二选一实现都可以):
     * 1: 实现Cloneable接口, 深度clone自己重写clone()实现,此方法只实现浅度clone
     * 2: 实现Serializable接口
     * @param obj
     * @return
     * @throws NoSuchMethodException
     * @throws SecurityException
     * @throws IllegalAccessException
     * @throws IllegalArgumentException
     * @throws InvocationTargetException
     * @throws ClassNotFoundException
     * @throws IOException
     * @throws CloneNotSupportedException
     * @Create  time : 2011-12-26 : 上午10:31:37
     * @ver     curr : 1.0
     * </pre>
     */
    public static<T> T clone(T obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException, IOException, CloneNotSupportedException{
        // is null
        if(null == obj) return null;
        
        // is instanceof Cloneable
        if(obj instanceof Cloneable){
            return invokeClone(obj);
        }
        // is instanceof Serializable
        else if(obj instanceof Serializable){
            return invokeCopy(obj);
        }
        
        // is not supported clone
        throw new java.lang.CloneNotSupportedException();
    }

    @SuppressWarnings("unchecked")
    public static <T> T invokeClone(T obj) throws NoSuchMethodException,
            IllegalAccessException, InvocationTargetException {
        Class<? extends Object> classObject = obj.getClass();
        Method method = classObject.getDeclaredMethod("clone");
        return (T)method.invoke(obj);
    }
    
    public static void main(String[] args) throws ClassNotFoundException, IOException {
        String x = "123";
        String v = invokeCopy(x);
        
        String[][] array = {{"1", "2"},{ "3", "2","2","3"},{"V","3"}}, array2;
        
        
        System.out.println(x);
        System.out.println(v);
        array2 = invokeCopy(array);
        System.out.println(Arrays.deepToString(array2));
        
        int[] a = {1,48,2}, b = {1, 20, 19};
        System.out.println("a --- hashCode: " + a.hashCode() + "---b: hashCode:" + b.hashCode());
        b = invokeCopy(a);
        System.out.println(b.hashCode());
        System.out.println(Arrays.toString(b));
        short age = 25;
        Person p = new TestClone(). new Person(1l, "andy", age), ps, pe;
        
        ps = invokeCopy(p);
        
        System.out.println(ps);
        
        try {
            //pe = clone(p);
            pe = invokeClone(p);
            System.out.println(pe);
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    class Person implements Serializable{//, Cloneable{
        private static final long serialVersionUID = 7605971168826706980L;
        private Long id;
        private String name;
        private short age;
        
        
        public Person() {
        }
        
        
        public Person(Long id, String name, short age) {
            super();
            this.id = id;
            this.name = name;
            this.age = age;
        }


        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public short getAge() {
            return age;
        }
        public void setAge(short age) {
            this.age = age;
        }


        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
        
        /*protected Object clone() throws CloneNotSupportedException {
            // TODO Auto-generated method stub
            return super.clone();
        }*/
        
    }
}
posted @ 2011-12-26 10:54 Powered By Andy 阅读(254) | 评论 (0)编辑 收藏
package cn.webmctv.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class TestInputStream {

    public static void main(String[] args) {
        /* 为什么要关闭和io流, 由于java底层是用c实现的, 所以当我们不停的调用new InputStream -> impl
         * 时候, c打开的文件会一直没有关闭,而导致文件删除不了,别的程序访问不了的问题,和操作系统打开文件
         * 超过最大数异常。而下面new FileInputStream(new File("c:/q.txt"));这种方式没有关闭c打开的
         * 文件一直new 就会出现打开文件太多异常。
        short count = 0;
        InputStream inStream = null;
            try {
                for (int i = 0; i < Short.MAX_VALUE; i++) {
                    //inStream.
                    inStream = new FileInputStream(new File("/root/install.log"));
                    //count ++;
                    System.out.println("count: " + count++);
                }
                //p.load(inStream);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally{
                if(inStream != null) try{ inStream.close(); } catch(IOException e){};
            }
        
        System.out.println(Short.MAX_VALUE);
        */
        short count = 0;
        InputStream inStream = null;
        for (int i = 0; i < Short.MAX_VALUE; i++) {
            try {
                    //inStream.
                    inStream = new FileInputStream(new File("/root/install.log"));
                    //count ++;
                    System.out.println("count: " + count++);
                
                //p.load(inStream);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally{
                if(inStream != null) try{ inStream.close(); } catch(IOException e){};
            }
        }
        
        System.out.println(Short.MAX_VALUE);
        
    }
}
posted @ 2011-11-18 10:09 Powered By Andy 阅读(3216) | 评论 (0)编辑 收藏

导航

<2011年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜