자바 직렬 화 중 하나
7651 단어 자바
하나의 인 스 턴 스 는 직렬 화 되 고 반 직렬 화 될 수 있어 야 합 니 다.이 종 류 는 자바.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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.