상세 컨텐츠

본문 제목

[입출력]직렬화 역직렬화

자바

by esoesmio 2023. 4. 10. 20:10

본문

클래스 생성자로 불러와서 직렬화로 보내고 역직렬화로 불러옴

 

import java.io.*;
//직렬화가 가능하도록 Serializable 인터페이스를 상속
//직렬화와 역직렬화가 일어날 때 사용되는 클래스는 동일한 클래스여야 한다.




//이 코드는 Java의 직렬화(Serialization)와 역직렬화(Deserialization)를 다루고 있습니다.
//
//        직렬화는 객체를 바이트 형태로 변환하여 파일이나 네트워크 전송 등에 사용할 수 있는 형태로 만드는 것을 말합니다. 역직렬화는 직렬화된 바이트 형태의 객체를 다시 객체 형태로 복원하는 것을 말합니다.
//
//        먼저 car 클래스가 직렬화 가능하도록 Serializable 인터페이스를 상속하도록 작성되어 있습니다. 그리고 z28 클래스의 main 메소드에서는 ObjectOutputStream을 사용하여 car 객체를 직렬화하여 파일에 출력합니다. 출력한 이후에는 ObjectInputStream을 사용하여 파일에서 객체를 읽어들이고 역직렬화하여 car 객체로 복원합니다.
//
//        각 car 객체는 new 연산자를 사용하여 생성하고 있으며, 생성자를 통해 넘겨받은 매개변수들을 객체의 멤버변수에 저장합니다.
//
//        출력된 결과는 car.toString() 메소드를 호출하여 car 객체의 멤버변수들을 문자열로 반환한 값을 출력합니다.
//
//        만약 직렬화를 위한 SerialVersionUID 값을 지정하지 않으면 컴파일러에서 자동으로 생성됩니다. 이 값은 역직렬화할 때 같은 클래스를 사용할 수 있도록 구분하는 역할을 합니다. 따라서 동일한 클래스의 버전이 아닐 경우 InvalidClassException 예외가 발생할 수 있습니다.
public class z28 {
    public static void main(String[] args) {

//직렬화 할 때 SerialVersionUID 값을 성정해서
        //역직렬화 할 때도 같은 클래스를 사용할 수 있도록 구분자를 넣어준다
//직접 id값을 넣어도 되고 자동완성 기능으로 만들어도 된다.


//        public static final long serialversionuid = 1;

        try {
            ObjectOutputStream oos = new ObjectOutputStream
                    ( new FileOutputStream("/Users/eunsukkim/Desktop/textki.txt"));


            car c1 = new car("현대","아반뗴",150.0,100);
            car c2 = new car("삼성","사미뗴",5150.0,126);
///객체를 직렬화하여 멤버변수들을 byte로 변경하여 출력

            oos.writeObject(c1);
            oos.writeObject(c2);
            oos.flush();
            oos.close();

            ObjectInputStream ois = new ObjectInputStream
                    (new FileInputStream("/Users/eunsukkim/Desktop/textki.txt"));
car car1 = (car) ois.readObject();
car car2 = (car) ois.readObject();

            System.out.println(car1.toString());
            System.out.println(car2.toString());
            ois.close();

        } catch (IOException e) {
            System.out.println(e.getMessage());
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }


    }



}

관련글 더보기

댓글 영역