[Java] nio vs io ( package level 에서의 개념, not 성능 )
http://tutorials.jenkov.com/java-nio/nio-vs-io.html
-
IO
stream oriented blocking IO
NIO
buffer oriented non-blocking IO
selectors
-
Stream oriented
한개 또는 그 이상의 byte 를 stream 에서 읽어온다.
stream 에서 앞뒤로 왔다갔다 할 수 없다. ( buffer 를 사용해 cache 해야 가능하다. )
-
Buffer oriented
우선 buffer 에 읽어오고 그 다음에 process 를 한다.
buffer 를 통해 앞뒤로 왔다갔다 할 수 있다.
-
Blocking
IO 는 read(), write() 를 수행했을 때 읽거나, 쓸 데이터가 있을 때까지 blocking 이 된다.
-
Non-blocking
NIO 는 channel 을 통해서 read 를 하는데, 읽을 거리가 없어도 blocking 되지 않는다.
쓰기도 마찬가지인데, channel 에 쓰라고 명령을 내려놓아도 blocking 되지 않는다.
-
Selector
Selector 를 사용하면 single thread 에서 여러개의 channel 의 input 을 모니터링 할 수 있다.
Selector 에 여러개의 channel 을 등록해놓고, select 를 수행하면, input/write 가능한 channel 을 돌려준다.
-
NIO 의 장, 단점
<단>
NIO 는 buffer size 만큼 읽어오기 때문에 해당 data 가 충분한 양을 가지고 있는지를 따로 체크해주어야 한다.
그래서 readLine 과 같은 방식으로 사용하는 경우에는 코드가 ugly 하거나 에러가 발생할 확률이 높아질 수 있다.
Read 의 경우에는 상황에 따라 NIO 보다는 IO 가 더 좋을 수 있다.
<장>
NIO 는 여러개의 thread 를 이용하여 input/output 을 관리하는 경우에는 관리적 측면에서 도움이 될 수 있다. ( 반대로 bandwidth 가 높은 적은 수의 connection 의 경우 IO 가 더 좋을 수도.. )
예를 들면 P2P 나 chat 프로그램이라던지..
또한 single thread 로 다른 channel 들 관리가 가능해 scalability 가 좋다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] AlarmManager 를 통해 이미 alarm 이 등록되었는지 어떻게 알 수 있을까? (0) | 2017.06.14 |
---|---|
[Java] nio vs. io ( 성능, 개념 ) (0) | 2017.06.13 |
[android] sign key hash key (sha) print out (0) | 2017.06.07 |
[android] VectorDrawable 에 대한 이야기 (0) | 2017.06.02 |
[android] xml 의 tool 을 사용하자 (0) | 2017.05.30 |
댓글