Java에서 객체 정렬화 및 반정렬화 자세히 보기
Java 객체의 정렬화 및 반정렬화
Java에서 우리는 여러 가지 방식으로 대상을 만들 수 있으며, 대상이 회수되지 않으면 이 대상을 다시 사용할 수 있다.하지만 JVM의 더미 메모리에 있는 Java 객체가 생성됩니다.이러한 객체는 JVM이 실행 중인 경우에만 존재할 수 있습니다.JVM이 중지되면 이러한 객체의 상태도 손실됩니다.
그러나 실제 응용 장면에서 우리는 이러한 대상을 오래도록 유지하고 필요할 때 대상을 다시 읽을 수 있어야 한다.Java의 객체 정렬화는 이 기능을 구현하는 데 도움이 됩니다.
대상 서열화 메커니즘(object serialization)은 자바 언어에서 만들어진 대상 지속화 방식으로 대상 서열화를 통해 대상의 상태를 바이트 그룹으로 저장할 수 있고 필요할 때 이 바이트 그룹을 반서열화된 방식으로 다시 대상으로 전환할 수 있다.객체 정렬화는 JVM의 활성 객체와 바이트 배열(흐름) 간에 쉽게 변환할 수 있습니다.
자바에서 대상의 서열화와 반서열화는 RMI(원격 방법 호출) 및 네트워크 전송에 광범위하게 응용된다.
관련 인터페이스 및 클래스
Java는 개발자가 Java 대상을 서열화하고 반서열화하는 데 편리하도록 API를 제공합니다.여기에는 다음 인터페이스와 클래스가 포함됩니다.
하나의 대상을 서열화하려고 시도할 때, Serializable 인터페이스를 지원하지 않는 대상을 만나면.이 경우 NotSerializableException이 제거됩니다.
서열화된 클래스에 부류가 있다면, 부류에 정의된 변수를 동시에 영구화하려면, 부류도java를 통합해야 한다.io.Serializable 인터페이스.
다음은 자바를 실현한 것입니다.io.Serializable 인터페이스의 클래스
package com.hollischaung.serialization.SerializableDemos;
import java.io.Serializable;
/**
* Created by hollis on 16/2/17.
* Serializable
*/
public class User1 implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
아래 코드를 통해 서열화 및 반서열화
package com.hollischaung.serialization.SerializableDemos;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.*;
/**
* Created by hollis on 16/2/17.
* SerializableDemo1 SerializableDemo2 Serializable
*/
public class SerializableDemo1 {
public static void main(String[] args) {
//Initializes The Object
User1 user = new User1();
user.setName("hollis");
user.setAge(23);
System.out.println(user);
//Write Obj to File
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("tempFile"));
oos.writeObject(user);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(oos);
}
//Read Obj from File
File file = new File("tempFile");
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(file));
User1 newUser = (User1) ois.readObject();
System.out.println(newUser);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(ois);
try {
FileUtils.forceDelete(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//OutPut:
//User{name='hollis', age=23}
//User{name='hollis', age=23}
이상은 본고의 전체 내용입니다. 여러분이 자바에서 대상의 서열화와 반서열화를 배우는 데 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.