[F-Lab 모각코 챌린지] 10일차(1) - Serializable & NIO
F-Lab 모각코 챌린지 10일차 를 진행 하며 정리 한 내용을 기록합니다 오늘은 자바의 신 27 장을 학습 하였으며, 내용이 길어서 여러 챕터로 나누었습니다.
![[F-Lab 모각코 챌린지] 10일차(1) - Serializable & NIO](/content/images/size/w1200/2023/06/-------_--------_-------3.png)
Serializable & NIO
Serializable
- Marker interface 중 하나
- 직렬화가 가능한 오브젝트임을 명시 할 수 있다.
- transient 키워드를 사용하여 선언 한 변수는 Serializable 의 대상에서 제외됨
serialVersionUID
객체의 버전을 명시하는 데 사용
여러 네트워크에서 객체의 전송 시 객체의 버전을 명시하여 '어떤 객체가 최신 버전인지' 알 수 있게 하기 위해 사용한다
NIO
- 동기/비동기 방식의 IO 를 위해 만들어진 패키지
(기존의 Java IO Api 는 블로킹 방식으로 동작)
Channel
String fileName = "파일이름";
byte[] byteData = "파일 데이터";
FileChannel channel = new FileOutputStream(fileName).getChannel();
ByteBuffer buffer = ByteBuffer.wrap(byteData);
channel.write(buffer);
channel.close();
- 데이터의 입출력을 위해 사용되는 클래스
- 파일, 소켓, 파이프 등 과 연결되어 데이터를 읽고 쓰는 기능을 제공
- 논블로킹 방식으로 동작
- 멀티 플렉싱 지원:
Selector 를 사용하여 다수의 채널을 단일 스레드로 관리 가능
Selector 는 여러 채널의 IO 작업 상태를 모니터링 하고 준비된 작업을 처리 할 수 있는 기능을 제공
상속 구현체
- FileChannel:
파일 입출력을 위한 채널. 파일 읽기 쓰기 가능 - SocketChannel:
네트워크 소켓 입출력 작업을 위한 채널.
TCP/IP 기반의 네트워크 소켓 연결에서 데이터를 읽고 쓰는 작업 수행 - ServerSocketChannel:
네트워크 서버 소켓 입출력 작업을 위한 채널.
서버 소켓을 생성하고 클라이언트의 요청을 수락하는 작업 수행 - DatagramChannel:
UDP 기반의 데이터그램 소켓 입출력 작업을 위한 채널.
데이터그램 패킷을 수신하고 전송하는 작업을 수행 - Pipe.SinkChannel & Pipe.SourceChannel:
파이프를 통해 스레드간 데이터를 전송하기 위한 채널
Buffer
데이터를 임시로 저장하는 공간
입출력 작업을 위해 데이터를 버퍼로 읽고 버퍼에서 데이터를 쓰는 방식
버퍼는 다음의 특징을 갖음
- 고정 크기
버퍼는 생성 시 고정된 크기를 갖음.
이 크기는 버퍼에 저장 할 수 있는 데이터의 최대 양을 나타냄 - 상대적 위치 지정
버퍼는 현재 위치와 한계(Limit) 를 가지고 있음.
현재 위치는 버퍼에서 읽거나 쓸 데이터의 위치를 가리킴
Limit 은 버퍼에서 읽거나 쓸 수 있는 데이터의 한계를 나타냄
상속 구현체
- ByteBuffer:
바이트 데이터를 저장하고 읽어올 수 있는 버퍼 클래스
파일 IO, 네트워크 통신 등 다양한 입출력에 사용됨 - CharBuffer:
문자 데이터를 저장하고 읽어올 수 있는 버퍼 클래스
문자열 처리, 텍스트 파일 입출력 등 문자열 데이터 입출력에 사용 - ShortBuffer:
2 byte 의 부호 없는 정수(short) 데이터 저장 및 읽어올 수 있는 버퍼 - IntBuffer:
4 바이트의 부호 없는 정수(int) 데이터 저장 및 읽어올 수 있는 버퍼 - LongBuffer:
8 바이트의 부호 없는 정수(long) 데이터 저장 및 읽어올 수 있는 버퍼 - FloatBuffer:
4 바이트의 부동 소수점(float) 데이터 저장 및 읽어올 수 있는 버퍼 - DoubleBuffer:
8 바이트 부동 소수점(double) 데이터 저장 및 읽어올 수 있는 버퍼