java对象深度拷贝
说明
java对象拷贝时,如果为引用类型,这时我们只是让新对象指向同一个地址,这样更改后就都变了,而java的对象输入输出流为我们提供了这种深度拷贝的实现方法。
//值得注意的是对象需要实现Serializable接口
public class FileUtil {
public static Object deeplyCopy(Serializable obj) {
try {
return bytes2object(object2bytes(obj));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static byte[] object2bytes(Serializable obj) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
baos.close();
return baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static Object bytes2object(byte[] bytes) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}