2010年1月22日
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();
}*/
}
}
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);
}
}
package cn.coder.y2010.m03.d27;
/** *//**
* 两个变量不通过第三个变量交换值
*/
public class SwitchIntValue {
public static void main(String[] args) {
int i = 5,j = 3;
i = i + j; // 5 + 3;
j = i - j; // 8 - 3;
i = i - j; // 8 - 5;
System.out.println(i + " - : - " + j);
}
}
1 public static String md5(String pwd) throws NoSuchAlgorithmException {
2
3 StringBuilder sb = new StringBuilder();
4 MessageDigest digest = MessageDigest.getInstance("md5");
5 byte[] b = digest.digest(pwd.getBytes());
6 // 与16进制进行与
7 // 16 59 1011001
8 // 59>>>4&0xf 101 | 59&0xf 1011001
9 // &1111 | &00001111
10 // 结果 101 | 00001001
11 // 16进制 5 9
12 for (byte s : b) {
13 // 左边的四位0101
14 //sb.append(Character.forDigit(
15 // ((s >>> 4) & 0xf) > 4 ? (s >>> 4) & 0xf ^ 0xe
16 // : (s >>> 4) & 0xf, 16));
17 sb.append(Character.forDigit((s >>> 4) & 0xf, 16));
18 // 右边的四位1001
19 sb.append(Character.forDigit(s & 0xf, 16));
20 }
21 // 所有MD5的生面0-f之间的字母与数字
22 return sb.toString().toUpperCase();
23 }
package cn.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class TestSeralizable implements Serializable{
private static final long serialVersionUID = -2495488416590182981L;
/**
* 保存序列化的对像
* @param path
* @param o
*/
public void writeObject(String path, Object o){
File file = new File(path);
if(file.exists()){
file.delete();
}
FileOutputStream stream = null;
ObjectOutputStream outputStream = null;
try {
stream = new FileOutputStream(file);
outputStream = new ObjectOutputStream(stream);
outputStream.writeObject(o);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
stream.close();
outputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
stream = null;
outputStream = null;
}
}
}
/**
* 读取序列化对像
* @param <T>
* @param path
* @return
*/
@SuppressWarnings("unchecked")
public <T> T readObject(String path){
File file = new File(path);
if(!file.exists()){
return null;
}
FileInputStream stream = null;
ObjectInputStream inputStream = null;
try {
stream = new FileInputStream(file);
inputStream = new ObjectInputStream(stream);
return (T)inputStream.readObject();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
stream.close();
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
stream = null;
inputStream = null;
}
}
return null;
}
public static void main(String[] args) {
// --------------- 创建序列化实例 ----------------------//
TestSeralizable test = new TestSeralizable();
TestSeralizable.UserBean user = new TestSeralizable().new UserBean();
user.setName("wkw");
user.setAge(24);
user.setEmail("wkw11@163.com");
user.setPassword("123");
// --------------- 保存序列化实例 ----------------------//
test.writeObject("c:/qq.tmp", user);
// --------------- 读取序列化实例 ----------------------//
UserBean unSeralizableObject = test.readObject("c:/qq.tmp");
System.out.println(unSeralizableObject);
}
/**
* 内部类
* @author Administrator
*
*/
public class UserBean implements Serializable{
private String name;
private String password;
private Integer age;
private String email;
/**
*
*/
public UserBean() {
super();
// TODO Auto-generated constructor stub
}
/**
* @param name
* @param password
* @param age
* @param email
*/
public UserBean(String name, String password, Integer age, String email) {
super();
this.name = name;
this.password = password;
this.age = age;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private static final long serialVersionUID = 7645220056029053735L;
@Override
public String toString() {
// TODO Auto-generated method stub
return "[" + this.name + "," + this.password + "," + this.age + "," + this.email +"]";
}
}
}