티스토리 뷰
DataInputStream 과 DataOutputStream
DataInputStream 과 DataOutputStream은 자바의 I/O 스트림 클래스 중 하나로, 원시 자료형(정수, 실수, 문자 등)을 쉽게 읽고 쓸 수 있도록 도와줍니다.
이 두 클래스는 데이터의 형식을 유지하면서 입력 및 출력을 수행할 수 있어, 자료의 손실 없이 데이터를 주고받을 수 있습니다.
예시)
ObjectInputStream과 ObjectOutputStream, 그리고 직렬화
ObjectInputStream과 ObjectOutputStream은 객체를 직렬화하여 파일에 쓰거나 네트워크로 전송하고, 이를 다시 역직렬화하여 객체로 복원할 때 사용하는 자바의 I/O 클래스입니다.
- 직렬화(Serialization): 객체의 상태를 바이트 스트림으로 변환하여 파일에 저장하거나 네트워크를 통해 전송할 수 있게 하는 과정입니다.
- 역직렬화(Deserialization): 바이트 스트림으로부터 객체를 복원하는 과정입니다.
직렬화(Serialization)에서 "바이트 스트림으로 변환한다"는 것은 객체의 상태(필드 값 등)를 바이트 단위의 데이터로 변환하고, 이를 스트림을 통해 입출력(I/O) 작업을 수행할 수 있도록 하는 과정을 의미한다. |
예시)
Serializable 인터페이스를 구현하는 이유?
Serializable 인터페이스는 마커 인터페이스로, 이 인터페이스를 구현하는 클래스는 직렬화할 수 있다는 의도를 명확히 합니다.
자바 런타임 환경(JRE)에 해당 객체가 직렬화 및 역직렬화에 적합함을 알려줍니다.
serialVersionUID 사용하는 이유?
serialVersionUID는 클래스의 버전 관리를 위해 사용되는 고유 식별자입니다. 직렬화된 객체를 역직렬화할 때, 저장된 객체의 serialVersionUID와 클래스의 serialVersionUID가 일치하는지 검사하여, 객체의 호환성을 확인합니다.
- 버전 관리: 클래스가 변경되면(예: 필드 추가, 메서드 변경 등), 기존에 직렬화된 객체와 호환성을 유지하기 위해 serialVersionUID를 명시적으로 정의합니다.
- 자동 생성: serialVersionUID를 명시하지 않으면 자바 컴파일러가 자동으로 생성하지만, 이는 클래스의 변경에 따라 달라질 수 있어 명시적으로 정의하는 것이 좋습니다.
'Java' 카테고리의 다른 글
Java(1:1 단방향 통신(서버측)) (0) | 2024.05.22 |
---|---|
Java(Socket) (0) | 2024.05.22 |
Java(File copy(문자/ 바이트 기반 입출력(ZIP 파일로 압축)) 및 로그와 파일 저장) (0) | 2024.05.21 |
Java(파일 입/출력 스트림(문자 기반) 및 정규 표현식) (0) | 2024.05.20 |
Java(문자 기반 스트림) (0) | 2024.05.19 |