Java

자바 직렬화(serialized) 테스트 소스

sstdio.h·2014년 10월 3일·조회 3,467

Java 객체 직렬화 쓰기/읽기 테스트

아래 예제는 ObjectOutputStream으로 문자열과 Date 객체를 파일에 직렬화해 저장하고, 다시 ObjectInputStream으로 읽어 오는 간단한 테스트입니다. 직렬화된 파일은 일반 텍스트가 아니라 바이너리 형식이므로, vi 같은 편집기로 열면 사람이 읽기 어려운 문자들이 보이는 것이 정상입니다.

1. serialWriteTest

import java.io.*;
import java.util.*;

class serialWriteTest
{
        public static void main(String args[])
        {
                try
                {
                        FileOutputStream fos = new FileOutputStream("test.txt");
                        ObjectOutput oo = new ObjectOutputStream(fos);

                        oo.writeObject("Serial Write Test!");
                        oo.writeObject(new Date());
                        oo.flush();
                        oo.close();
                }
                catch(Exception e) {
                        e.printStackTrace();
                }

                System.out.println("Serial Write Test!");
                System.out.println(new Date());
        }
}

원래 코드에서는 ObjectOutput 객체를 oo라는 이름으로 만들었지만, 실제로는 s.writeObject()를 호출하고 있었습니다. 컴파일되도록 oo.writeObject()로 수정해야 합니다.

컴파일 후 실행합니다.

# javac serialWriteTest.java
# java serialWriteTest
Serial Write Test!
Tue Sep 16 18:25:32 KST 2014

# vi test.txt
¬i^@^Et^@^RSerial Write Test!sr^@^Njava.util.Datehj<81>^AKYt^Y^C^@^@xpw^H^@^@^AH}Cy<86>x

2. serialReadTest

import java.io.*;
import java.util.*;

class serialReadTest
{
        public static void main(String args[])
        {
                try
                {
                        FileInputStream fis = new FileInputStream("test.txt");
                        ObjectInput oi = new ObjectInputStream(fis);

                        System.out.println((String)oi.readObject());
                        System.out.println((Date)oi.readObject());
                        oi.close();
                }
                catch(Exception e) {
                        e.printStackTrace();
                }
        }
}

직렬화된 객체를 읽을 때는 쓴 순서와 같은 순서로 읽어야 합니다. 위의 쓰기 예제에서 문자열을 먼저 쓰고 Date 객체를 그다음에 썼으므로, 읽기 예제에서도 String, Date 순서로 읽습니다.

컴파일 후 실행합니다.

# javac serialReadTest.java
# java serialReadTest
Serial Write Test!
Tue Sep 16 18:25:32 KST 2014

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.