JAVA

Java IO vs NIO

icedstone 2025. 7. 20. 15:47
반응형

java.io, java.nio (new input/output)

io는 blocking, nio 는 non-blocking 방식(blocking도 지원)

io는 stream 형식으로 입출력, nio는 channel 형식으로 입출력

이라고 하지만 결국에는 커넥션을 맺는건데 이게 왜 중요할까???

예를 들어 이렇게 생각할 수 있을거 같다.

"실제로 데이터를 끊어서 읽어온다음 처리하는게 아니라 다 읽어오고 나서 처리하는건데 non-blocking 되는게 필요한거야?"(물론 끊어 읽어와서 처리하는 것도 가능은하다.

이런 의문은 소스코드를 보면 더 커진다.

InputStream in = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = in.read(buffer); // 데이터가 들어올 때까지 대기 (blocking)

 

int bytesRead = socketChannel.read(buffer); // 데이터 없으면 0 반환

 

그치만 데이터가 들어올 때 까지 blocking 된다는 것은 thread가 다른 일을 하지 못한다는 것을 의미한다.

즉 열개의 데이터가 동시에 들어올 때 하나의 thread만이 일한다고 생각하면, 하나씩 열번 처리 되는 것과 하나가 열개를 왔다갔다 하면서 처리하는 정도의 차이가 생길 것이다.

 

그러니 다음 상황을 고려해서 io와 nio중 결정하면 될 것이다.

- 연결되는 connection이 많은가?

- 전송되는 데이터의 양이 많은가?

- 순차적으로 진행되어야 하는가?

반응형

'JAVA' 카테고리의 다른 글

Java Collection - List  (0) 2025.08.08
Java Collection - Map  (3) 2025.08.08
Java Collection Framework  (4) 2025.07.12
interface vs abstract class  (1) 2025.07.05
Blocking vs Non-Blocking, Synchronous vs Asynchronous  (0) 2025.04.21