피드백
NIO = Non blocking I/O = New I/O
InputStream : 입력받는 스트림
OutputStream : 무언가 쓰는, 보내는 스트림
InputStream과 OutputStream은 바이트 단위로 읽어 들인다.
✔ BufferedInputStream을 사용하면 좋은 이유, 왜 성능상의 이점이 있는지? 버퍼에 모아서 보내면 왜 빨라질까?
프로그램에서 InputStream, OutputStream을 써서 데이터 보낼 때 OS레벨의 시스템 콜을 하게 되는데
이때 버퍼에 모아서 보낼수록 시스템 콜 횟수가 줄어들면서, 성능상 이점이 생기게 된다.
IO는 스트림 기반, NIO는 채널 기반 우리는 NIO를 주로 사용하게 된다.
NIO 중에서도 버퍼 기반인데 채널이라는 인터페이스를 사용하면 양방향 입출력이 가능하다.
블로킹과 넌블로킹
블로킹 : 입력 스트림의 read()메소드를 호출하면 데이터가 입력되기 전까지 Thread가 블로킹(대기상태)이 된다.
넌 블로킹 : Thread interrupt 하면서 빠져나올 수 있다.
버퍼(BufferedStream)는 무조건 써야 된다.
다이렉트 버퍼 / 논 다이렉트 버퍼
다이렉트 버퍼와 논 다이렉트와 연관된 좋은 오라클 자료
JVM밖의 메모리를 사용하는 프로그램을 만들어서, 더 큰 메모리를 사용하는 어플리케이션을 만들 수 있다.
https://blogs.oracle.com/javamagazine/post/creating-a-java-off-heap-in-memory-database
자바 IO의 데코레이터 패턴
자기 자신의 타입을 감싸는 형태
직렬화 = 이삿짐센터가 짐 싸는 작업 (객체 = 우리 집)
객체를 저장했다가 다시 불러오는 방법
Serializable, serialVersionUID
Q) io는 스트림 기반이고, nio는 채널 기반인데, Channel클래스는 자기 자신의 생성자를 통해 인스턴스화를 할 수 없고 오로지 InputStream/OutputStream기반의 클래스가 생성된 후 getChannel()로 만들 수 있다고 하는데 그러면 nio도 스트림 기반이 될 수 있지 않을까요?
A) 맞습니다. io제일 밑단에 있는 게 기술적으로 stream입니다.
그걸 버퍼 단위로 읽어 들이면 nio, 바이트 단위로 읽어들이면 그냥 io입니다.
해외 취업 별거 없다.(?)(FAANG, MANGA ...)
"왜 해외로 오고싶은지"를 먼저 생각하자.
'Java' 카테고리의 다른 글
스터디할래 15주차 과제: 람다식(feedback, 피드백) (0) | 2021.03.06 |
---|---|
스터디 할래 13주차 과제: I/O (0) | 2021.03.06 |
스터디할래 14주차 과제: 제네릭 (0) | 2021.03.06 |
(스터디 할래) 15주차 과제: 람다식 (0) | 2021.03.05 |
스터디 할래 14주차 과제: 제네릭(feedback, 피드백) (0) | 2021.02.28 |