투케이2K
137. (java/자바) json형식으로 직렬화 (serialize) 바이트값 포맷, 역직렬화(deserialize) 원본 데이터 확인 실시 본문
137. (java/자바) json형식으로 직렬화 (serialize) 바이트값 포맷, 역직렬화(deserialize) 원본 데이터 확인 실시
투케이2K 2021. 1. 26. 08:36/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : Eclipse
개발 언어 : Java
/* =========================== */
/* =========================== */
[소스 코드]
package AI4;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
class Info_Serialize implements Serializable{
//==== 전역변수 선언 실시 ====
private String name = "";
private int age = 0;
//==== 클래스 생성자 초기화 실시 ====
public Info_Serialize(String name, int age) {
this.name = name;
this.age = age;
}
//==== toString 반환값 재정의 실시 (json형태 포맷) ====
@Override
public String toString() {
return String.format("{\"name\"=\"%s\",\"age\"=%d}", name, age);
}
}//Serializable 클래스 종료
public class MainActivity5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("[json형식으로 직렬화 (serialize) 바이트값 포맷, 역직렬화(deserialize) 원본 데이터 확인 실시]");
/*[설 명]
* 1. 직렬화 - 외부 시스템과 데이터를 주고 받을 수 있도록 byte 형태로 데이터를 전송하는 것입니다
* 2. 역직렬화 - byte 형태 데이터를 다시 원본 데이터로 변환하는 것입니다
* 3. 사용이유 - 복잡한 데이터 구조 형태라도 직렬화 조건만 지키면 간편하게 byte 형태 데이터를 주고 받을 수 있습니다
* 4. 조건 - 직렬화, 역직렬화를 담당하는 클래스는 반드시 Serializable 인터페이스를 상속받아야합니다
* 5. Info_Serialize 클래스 - 직렬화, 역직렬화를 담당하는 객체입니다
* 6. InputStream은 데이터 읽기, OuputStream은 데이터 쓰기를 담당합니다
* 7. toString - 데이터 반환 형태를 정의한 것으로 사용자가 다른 포맷 방식으로 변경할 수 있습니다
* 8. 자바에서 쌍따옴표를 사용하기 위해서는 [역슬래쉬 쌍따옴표 \"] 를 해주면됩니다
*/
//==== 직렬화 수행 실시 ====
Info_Serialize info_Serialize = new Info_Serialize("twok",28);
byte serialize_arr[] = null; //직렬화 바이트값을 담을 배열 선언
try {
ByteArrayOutputStream s_bs = new ByteArrayOutputStream();
ObjectOutputStream s_os = new ObjectOutputStream(s_bs);
s_os.writeObject(info_Serialize); //데이터 쓰기
serialize_arr = s_bs.toByteArray(); //바이트값을 배열에 담습니다
System.out.println("직렬화 [전] 데이터 : "+info_Serialize.toString());
System.out.println("직렬화 [후] 데이터 : "+Arrays.toString(serialize_arr));
System.out.println("");
}
catch(Exception e) {
e.printStackTrace();
}
//==== 역직렬화 수행 실시 ====
byte deserialize_arr[] = null; //역직렬화를 수행하기위해 담을 배열 선언
deserialize_arr = Arrays.copyOf(serialize_arr, serialize_arr.length); //바이트값 복사 실시
try {
System.out.println("역직렬화 [전] 데이터 : "+Arrays.toString(deserialize_arr));
ByteArrayInputStream d_bs = new ByteArrayInputStream(deserialize_arr);
ObjectInputStream d_os = new ObjectInputStream(d_bs);
Object deserialize_object = d_os.readObject(); //데이터 읽기
Info_Serialize info_Deserialize = (Info_Serialize) deserialize_object;
System.out.println("역직렬화 [후] 데이터 : "+info_Deserialize);
}
catch(Exception e) {
e.printStackTrace();
}
}//메인 종료
}//클래스 종료
/* =========================== */
[결과 출력]
[json형식으로 직렬화 (serialize) 바이트값 포맷, 역직렬화(deserialize) 원본 데이터 확인 실시]
직렬화 [전] 데이터 : {"name"="twok","age"=28}
직렬화 [후] 데이터 : [-84, -19, 0, 5, 115, 114, 0, 18, 65, 73, 52, 46, 73, 110, 102, 111, 95, 83, 101, 114, 105, 97, 108, 105, 122, 101, 27, 24, -83, -108, -40, -66, 1, -34, 2, 0, 2, 73, 0, 3, 97, 103, 101, 76, 0, 4, 110, 97, 109, 101, 116, 0, 18, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 120, 112, 0, 0, 0, 28, 116, 0, 4, 116, 119, 111, 107]
역직렬화 [전] 데이터 : [-84, -19, 0, 5, 115, 114, 0, 18, 65, 73, 52, 46, 73, 110, 102, 111, 95, 83, 101, 114, 105, 97, 108, 105, 122, 101, 27, 24, -83, -108, -40, -66, 1, -34, 2, 0, 2, 73, 0, 3, 97, 103, 101, 76, 0, 4, 110, 97, 109, 101, 116, 0, 18, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 120, 112, 0, 0, 0, 28, 116, 0, 4, 116, 119, 111, 107]
역직렬화 [후] 데이터 : {"name"="twok","age"=28}
/* =========================== */
/* =========================== */
[요약 설명]
* 1. 직렬화 - 외부 시스템과 데이터를 주고 받을 수 있도록 byte 형태로 데이터를 전송하는 것입니다
* 2. 역직렬화 - byte 형태 데이터를 다시 원본 데이터로 변환하는 것입니다
* 3. 사용이유 - 복잡한 데이터 구조 형태라도 직렬화 조건만 지키면 간편하게 byte 형태 데이터를 주고 받을 수 있습니다
* 4. 조건 - 직렬화, 역직렬화를 담당하는 클래스는 반드시 Serializable 인터페이스를 상속받아야합니다
* 5. Info_Serialize 클래스 - 직렬화, 역직렬화를 담당하는 객체입니다
* 6. InputStream은 데이터 읽기, OuputStream은 데이터 쓰기를 담당합니다
* 7. toString - 데이터 반환 형태를 정의한 것으로 사용자가 다른 포맷 방식으로 변경할 수 있습니다
* 8. 자바에서 쌍따옴표를 사용하기 위해서는 [역슬래쉬 쌍따옴표 \"] 를 해주면됩니다
/* =========================== */