자바 직렬 화 중 하나

7651 단어 자바
1 자바 서열 화 기초
   하나의 인 스 턴 스 는 직렬 화 되 고 반 직렬 화 될 수 있어 야 합 니 다.이 종 류 는 자바.io.Serializable 또는 자바.io.Externalizable 인 터 페 이 스 를 실현 해 야 합 니 다.자바.io.Serializable 은 표지 인터페이스 일 뿐 이 인터페이스의 종 류 를 실현 할 때 직렬 화 되 고 반 직렬 화 될 수 있 음 을 나타 냅 니 다.
직렬 화 인쇄 도구 클래스:
/**
 *       
 * @author hehaibo
 *
 */
public class SerialUtils {
	/**
	 *             
	 * 
	 * @param object
	 *              
	 * @param fileName
	 *               
	 * @throws IOException
	 * @throws FileNotFoundException
	 */
	public static void writeObject(Object object, String fileName)
			throws IOException {
		FileOutputStream fos =  new FileOutputStream(new File(fileName));
		ObjectOutputStream oos = new ObjectOutputStream(
				new FileOutputStream(new File(fileName)));
		oos.writeObject(object);
		oos.flush();
		oos.close();
		fos.close();
		Printer.printf(fileName);
	}
	
	/**
	 *         
	 * @param fileName
	 * @return
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	public static Object readObject(String fileName) throws IOException, ClassNotFoundException{
		Object obj = null;
		FileInputStream fis = new FileInputStream(new File(fileName));
		ObjectInputStream ois = new ObjectInputStream(fis);
		obj = ois.readObject();
		ois.close();
		fis.close();
		return obj;
	}
}

 
public class Printer {
	public static  int length=16 ;
	
	public static void registerLength(int len){
		length=len;
	}
	public static void printf(String fileName) throws IOException {
		File file = new File(fileName);
		System.out.println("    :" + file.length());
		InputStream fis;
		fis = new FileInputStream(file);
		byte bs[] = new byte[length];
		while ((length = fis.read(bs)) != -1) {
			System.out.print(Binary2Hex.Bytes2HexString(bs, length) + "\r");
		}
		fis.close();
	}
}

 
/**
 *           
 * 
 * @author wb_haibo.hehb
 */
public class Binary2Hex {
	/**
	 * 
	 * @param b
	 *            byte[]
	 * @return String
	 */
	public static String Bytes2HexString(byte[] b, int length) {
		String ret = "";
		// int ia=0xFF;
		// System.out.println(Integer.toBinaryString(ia));
		for (int i = 0; i < length; i++) {
			// System.out.println(Integer.toBinaryString(b[i]));
			String hex = Integer.toHexString(b[i] & 0xFF);
			// if (hex.length() == 2) {
			hex = "0x" + hex.toUpperCase();
			// }
			if (hex.length() == 3) {
				hex = hex + " ";
			}
			ret += hex + " ";
		}
		return ret;
	}
}

 
  직렬 화 예제:
  
public interface SuperInterface {
	public static final String abc="abc";
}

 
 
public class Person implements Serializable,SuperInterface {
	public static final String staVal="staVal";
	private String name;
	private String account;
	private String password;
	transient private String sex;
	public Person(){
		System.out.println("son come!");
	}
}

 
/**
 *    extentds   
 * 1     -->        ,               。
 * 2       -->          ,            ,        
 * 3   transient[  ]     -->       
 * 4       -->         。 
 * 5           [      ]-->            。
 * @author hehaibo
 */
public class TestCaseOne {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			SerialUtils.writeObject(new Person(), "hehaibo");
			Object object = SerialUtils.readObject("hehaibo");
			System.out.println(object);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
}

   출력 결과:
 
son come!
    :104
0xAC 0xED 0x0  0x5  0x73 0x72 0x0  0x15 0x6F 0x72 0x67 0x2E 0x68 0x68 0x62 0x2E 
0x73 0x65 0x72 0x69 0x61 0x6C 0x2E 0x50 0x65 0x72 0x73 0x6F 0x6E 0x62 0x4D 0x55 
0x76 0x9B 0xA8 0x3  0xBD 0x2  0x0  0x3  0x4C 0x0  0x7  0x61 0x63 0x63 0x6F 0x75 
0x6E 0x74 0x74 0x0  0x12 0x4C 0x6A 0x61 0x76 0x61 0x2F 0x6C 0x61 0x6E 0x67 0x2F 
0x53 0x74 0x72 0x69 0x6E 0x67 0x3B 0x4C 0x0  0x4  0x6E 0x61 0x6D 0x65 0x71 0x0  
0x7E 0x0  0x1  0x4C 0x0  0x8  0x70 0x61 0x73 0x73 0x77 0x6F 0x72 0x64 0x71 0x0  
0x7E 0x0  0x1  0x78 0x70 0x70 0x70 0x70 
org.hhb.serial.Person@1df073d

 
 
    서열 화 된 하위 클래스 계승 예시:
   
public class Person 
extends SuperClasss 
implements Serializable{
	public static final String staVal="staVal";
	private String name;
	private String account;
	private String password;
	transient private String sex;
	public Person(){
//		super("abc");
		System.out.println("son come!");
	}
	
}
public class SuperClasss implements Serializable,SuperInterface{
	private String test="test";
	public SuperClasss(){
		System.out.println("old father come 1!");
	}
//	public SuperClasss(String name){
//		System.out.println("old father come 2!");
//	}
}


  
/**
 *   :
 * 1                  <br>
 *   1.1            ,          <br>
 *  	                 ,            <br>
 *  
 *  	    :
 *  	
 *  	     :            。
 *  
 * 	 1.2            ,            ,               <br>
 * 	  	    ,            ,   java   ,      super()<br>
 * 	 
 * 	 1.3            ,            ,                    <br>
 * 		      , java.io.InvalidClassException: org.hhb.serial.Person; org.hhb.serial.Person; no valid constructor<br> 
 *   
 *   	    :
 *   	
 *   1.4            ,           ,         <br>
 *   	                 ,            <br>
 *    
 *    	     : 1.1,            。
 *   
 *  2                  <br> 
 *  	
 *	   	                ,            
 *		     ,            ,            
 *		    :
 *
 */
public class TestCaseTwo {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws IOException, ClassNotFoundException {
		
		SerialUtils.writeObject(new Person(), "zhangsan");
		Object o = SerialUtils.readObject("zhangsan");
		System.out.println(o);
		SerialUtils.readObject("zhangsan");
	}
}

 
 
  계속...
  Externalizable 은 Serializable 인 터 페 이 스 를 계승 하여 두 가지 방법 을 추가 했다.
public interface Externalizable extends java.io.Serializable {
    void writeExternal(ObjectOutput out) throws IOException;
    void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
}

좋은 웹페이지 즐겨찾기