*소켓통신
https://ddangeun.tistory.com/31
*예제
https://hijjang2.tistory.com/915
[JAVA] 네트워크_소켓(Socket) 통신_NIO 입출력(논블로킹) [2/3] ★★
[ NIO를 이용한 네트워크 입출력 - 논블로킹(non-blocking) 방식 ] 파일 입출력편에서 다룬 것 처럼 네트워크도 NIO를 통해 입출력을 수행할 수 있습니다. 스트림 계열의 경우 인풋과 아웃풋을 따로 만
hijjang2.tistory.com
*소켓통신 후 버퍼 rewind
소켓 통신에서 데이터를 송수신할 때는 보통 버퍼를 사용합니다. 버퍼(buffer)는 일시적으로 데이터를 저장하고 전달하는 데 사용되는 메모리 영역입니다. Java에서는 ByteBuffer 클래스가 주로 사용되며, 소켓 통신에서도 ByteBuffer를 사용하여 데이터를 송수신하고 처리합니다.
ByteBuffer는 내부적으로 데이터를 저장하는 포지션(position)과 데이터를 읽고 쓰기 위해 참조하는 인덱스를 가지고 있습니다. 데이터를 버퍼에 쓸 때는 버퍼의 포지션을 이동시키고, 데이터를 읽을 때는 인덱스를 이용하여 데이터를 읽어옵니다.
소켓 통신에서는 데이터를 버퍼에 쓴 후에 보내거나 받은 후에 버퍼에서 읽는 작업을 수행합니다. 이 때, 버퍼를 사용하다 보면 버퍼의 포지션이 데이터를 쓰거나 읽을 때마다 이동하게 됩니다. 이렇게 되면 버퍼를 재사용할 때 문제가 발생할 수 있습니다.
소켓 통신에서는 데이터를 더 작은 단위로 나누어 보낼 수 있습니다. 이런 경우 버퍼의 포지션이 데이터를 쓸 때마다 이동하면 데이터가 제대로 분리되지 않을 수 있습니다. 따라서 이전에 사용한 버퍼를 재사용하기 전에 버퍼의 포지션을 초기화해야 합니다. 이것을 rewind라고 합니다.
ByteBuffer.rewind() 메서드를 호출하면 버퍼의 포지션이 0으로 초기화됩니다. 이렇게 하면 새로운 데이터를 버퍼에 쓸 때 데이터가 올바르게 위치하게 됩니다. 따라서 소켓 통신에서는 버퍼를 재사용하기 전에 rewind() 메서드를 호출하여 포지션을 초기화해야 올바르게 동작할 수 있습니다.
'+)기록 > 과제' 카테고리의 다른 글
랜덤숫자 (0) | 2023.07.27 |
---|---|
Iterator(반복자) (0) | 2023.07.25 |
정리사항 74 - 조건문 if문에서의 break와 return, continue / 반복문for문에서의 break와 continue / 레이아웃 매개변수 (0) | 2023.06.22 |
정리사항 73 - OpenGL(그래픽 처리를 위한 크로스 플랫폼 API) (0) | 2023.06.21 |
정리사항 72 - 핸들러(Handler, 스레드 통신) (0) | 2023.06.15 |