Java

[Java]입력과 출력 -part.7(Object InOutStream)

MoZZANG 2022. 3. 27. 13:36

이번 포스팅에서는 우리가 만든 클래스들을 필터를 통해 입력하거나 또는 출력하는 법을 알아보도록 하자.

 

 

자바에서 객체 안에 저장되어 있는 내용을 파일로 저장하거나 네트워크를 통하여 다른 곳으로 전송하려면 객체를 바이트 형태로 일일이 분해해야 한다. 이를 위하여 객체를 직접 입출력 할 수 있도록 해주는 객체 스트림이 바로 ObjectStream이다.


이번에 우리가 사용할 만든 클래스는 Person이라는 클래스이며 클래스 맴버들은 다음과 같다.

 

▲ Person 클래스. 이름,나이,주소를 가지는 클래스이다.

 

 

 

1. 메모리 -> 파일

 

Data source는 메모리이며 Data destination은 파일이다.

메모리에 저장된 값을 파일로 출력하는 것이기 때문에 입력스트림은 불필요하다.

 

 

▲ 데이터 소스를 준비한다. Person클래스의 인자생성자를 이용하여 3개의 객체를 만들었다..

 

 

 

▲ 파일로의 출력을 위해 출력용 노드스트림인 FileOutputStream을 이용해 노드 스트림을 만들고 거기에 heap영역에 있는 메모리(객체)를 파일로 저장하기 위해 필터스트림인 ObjectOutputStream을 끼운다.

 

 

 

인스턴스화된 객체를 출력할 것인데 ObjectStream을 사용하기 위해서는 반드시 객체가 직렬화(Serialization)이 되어 있어야 한다.

 

▲ Person클래스는 우리가 만든 클래스이므로 자동 직렬화가 안되어있으므로 직접 상속시켜주어야 한다. 바로 위 코드 처럼말이다.

 

이후 writeObject()메소드를 이용해서 파일로 출력하면 객체에 저장된 정보를 파일로 출력하는 것이 완료된다.

 

 

 

 

 

 

 

2. 파일 -> 메모리

이번에는 저장한 파일을 읽어와서 다시 Person타입의 변수에 저장해보자

 

역시나 출력스트림인 불필요하다.

▲ 파일을 읽어올 노드스트림과 필터스트림을 사용해 읽어오자

 

 

▲ 읽어오는 데이터를 형변환을 통해서 Person타입으로 바꿔준 후 넣어야 한다. 파일에 저장되어 있는 데이터는 Object형이기 때문이다.

 

DataOutputStream과 마찬가지로 더 이상 출력할 데이터가 없는데도 불구하고 출력을 하려고 하면 Run-Time error중 하나인 EOFException이 발생한다.