기본 형식
코드 사본은 다음과 같습니다.
공개 클래스 MyClass는 시리얼이 가능한 {
...}
직렬화 :
코드 사본은 다음과 같습니다.
ObjectOutputStream output = 새 ObjectOutputStream (new FileOutputStream (outputPath));
output.writeObject (myObject);
사제화 :
코드 사본은 다음과 같습니다.
ObjectInputStream input = new ObjectInputStream (new FileInputStream (inputPath));
return (myclass) input.readobject ();
JSON 형식
Jackson 패키지를 사용하십시오. Jackson은 매우 효율적인 Java Json 패키지입니다. 문서 및 다운로드는 공식 웹 사이트를 참조하십시오.
직렬화
코드 사본은 다음과 같습니다.
ObjectMapper Mapper = 새로운 ObjectMapper ();
mapper.writeValue (새 파일 (outputPath), myObject);
사제화 :
코드 사본은 다음과 같습니다.
return mapper.readValue (새 파일 (outputpath), myclass.class);
완전한 테스트 코드
코드 사본은 다음과 같습니다.
import java.io.file;
import java.io.fileInputStream;
import java.io.fileoutputStream;
import java.io.ioexception;
import java.io.objectinputstream;
import java.io.objectoutputStream;
java.io.serializable import;
java.util.arraylist 가져 오기;
com.fasterxml.jackson.core.jsongenerationException 가져 오기;
com.fasterxml.jackson.core.jsonparseexception 가져 오기;
com.fasterxml.jackson.databind.jsonMappingException import;
com.fasterxml.jackson.databind.objectmapper 가져 오기;
공개 수업 동물원은 직렬화 가능한 {를 구현합니다.
개인 정적 최종 최종 긴 SerialversionUID = 1L;
개인 정적 ObjectMapper Mapper = New ObjectMapper ();
공개 정적 int maxanimalcount;
공공 배열리스트 <String> 동물;
공개 동물원 () {
Animals = New ArrayList <string> ();
}
공개 정적 무효 SetMax (int max) {
maxanimalcount = max;
}
/**
* 동물 어레이에 동물을 추가하십시오.
* @Param AnimalName
*/
public void addanimal (String AnimalName) {
if (동물 .size () <MaxanimalCount)
Animals.add (동물 이름);
}
@보수
공개 문자열 tostring () {
"동물원 : /n 동물 :" + 동물.tostring () +를 반환하십시오
"/n MaxanimalCount :" + MaxanimalCount + "/n";
}
/**
* LogPath에서 파일에 대한 표준 직렬화를 출력합니다.
* @param logpath
*/
public void serializetolog (String logpath) {
ObjectOutputStream output = null;
노력하다
{
출력 = 새로운 ObjectOutputStream (
새 FileOutputStream (logpath));
output.writeobject (this);
} catch (예외 e) {
e.printstacktrace ();
} 마지막으로 {
노력하다 {
output.close ();
} catch (ioexception e) {
e.printstacktrace ();
}
}
}
/**
* LogPath에서 파일로 JSON 직렬화 (Jackson 사용)를 출력합니다.
* @param logpath
*/
public void serializejsontolog (String logpath) {
노력하다 {
mapper.writeValue (새 파일 (logpath), this);
} catch (jsongenerationException e) {
e.printstacktrace ();
} catch (jsonMappingException e) {
e.printstacktrace ();
} catch (ioexception e) {
e.printstacktrace ();
}
}
/**
* LogPath의 파일에서 동물원 인스턴스를 표준화합니다.
* @param logpath
* @return 사막화 동물원 인스턴스
*/
공개 정적 동물원 deserializefffromlog (String logpath) {
ObjectInputStream input = null;
노력하다
{
입력 = 새로운 ObjectInputStream (
새 fileInputStream (logpath));
return (zoo) input.readobject ();
} catch (예외 e) {
e.printstacktrace ();
} 마지막으로 {
노력하다 {
input.close ();
} catch (ioexception e) {
e.printstacktrace ();
}
}
널 리턴;
}
/**
* JSON LogPath의 파일에서 동물원 인스턴스를 제조합니다.
* @param logpath
* @return JSON 사막화 동물원 인스턴스
*/
공개 정적 동물원 deserializejsonfromlog (String logpath) {
노력하다 {
return mapper.readValue (새 파일 (logpath), zoo.class);
} catch (jsonparseexception e) {
e.printstacktrace ();
} catch (jsonMappingException e) {
e.printstacktrace ();
} catch (ioexception e) {
e.printstacktrace ();
}
널 리턴;
}
}
클래스 Zooserializetest {
public static void main (String [] args) {
동물원 동물원 1 = 새로운 동물원 ();
ZOO.SETMAX (100);
zoo1.addanimal ( "햄스터");
zoo1.addanimal ( "양");
zoo1.serializetolog ( "zoo1.log");
동물원 동물원 2 = 새로운 동물원 ();
ZOO.SETMAX (200);
zoo2.addanimal ( "Tiger");
ZOO2.Serializetolog ( "zoo2.log");
ZOO.SETMAX (300);
// 사제화
zoo1 = zoo.deserializefromlog ( "zoo1.log");
zoo2 = zoo.deserializefromlog ( "zoo2.log");
System.out.println ( "zoo1 : /n" + zoo1);
System.out.println ( "zoo2 : /n" + zoo2);
// JSON에 직렬화
zoo1.serializejsontolog ( "zoo1.json");
zoo1 = zoo.deserializejsonfromlog ( "zoo1.json");
System.out.println ( "json의 ZOO1 : /n" + ZOO1);
}
}