표준 입출력의 기본 개념
fun main() {
print("enter: ")
val input = readLine()!!
println("$input")
}
//enter: 안녕하세염?
//안녕하세염?
Kotlin의 입출력 API
처리 목적 | 관련 자바 라이브러리 |
파일 처리 | java.io.File |
바이트 단위의 입력 처리 | java.io.InputStream |
바이트 단위의 출력 처리 | java.io.OutputStream |
문자 기반 읽기 처리 | java.io.Reader |
문자 기반 쓰기 처리 | java.io.Writer |
버퍼를 가진 읽기 처리 | java.io.BufferedReader |
스트림은 데이터가 강물에 띄운 것처럼 흘러간다는 의미로 데이터가 머물러 있지 않고 전달되는 개념을 말한다.
자바의 io, nio(new input output)의 개념
구분 | java.io | java.nio |
입출력 | 스트림 방식 | 채널 방식 |
버퍼 방식 | 넌버퍼 | 버퍼 |
비동기 지원 | 지원 안함(블로킹 방식) | 지원함(넌블로킹 지원) |
입출력의 구분으로는 발생한 데이터를 바로 전송시키는 스트림 방식과 여러개의 수로를 사용해 병목 현상을 줄이는 채널 방식이 있다.
버퍼는 송/수신 사이에 임시적으로 사용하는 공간이 있는지에 따라 결정.
공간이 있는 버퍼가 좀 더 유연한 처리가 가능.
스트림과 채널
스트림은 데이터가 흘러가는 방향성에 따라 입력 스트림과 출력 스트림으로 구분.
데이터를 읽고 저장하는 양방향성을 가지는 작업을 할 때는 두 작업을 별도로 지정해야 한다.
채널 방식은 양방향으로 입력과 출력이 모두 가능하기 때문에 입출력을 별도로 지정하지 않아도 된다.
넌버퍼와 버퍼 방식
스트림 방식에서는 1바이트를 쓰면 입력 스트림이 1바이트를 읽는다.
버퍼를 사용해서 다수의 데이터를 읽는 것보다 느리게 동작한다.
그래서 io에서는 버퍼와 스트림을 병합해서 사용하는 방식을 제공하기도 한다.
nio에서는 기본적으로 버퍼를 사용하는 입출력을 하기 때문에 더 나은 성능을 보여준다.
블로킹과 넌블로킹
호출한 코드에서 작업을 완료할 수 있을 때까지 멈춰 있는 것을 블로킹이라고 한다.
코드의 흐름을 방해하지 않도록 별개의 흐름으로 작업하는 것을 넌블로킹이라고 한다.
'코틀린' 카테고리의 다른 글
Do it! 코틀린 프로그래밍, 10-1 코틀린 표준 함수 (0) | 2021.09.28 |
---|---|
Do it! 코틀린 프로그래밍, 09-5 시퀀스 활용하기 (0) | 2021.09.26 |
Do it! 코틀린 프로그래밍, 09-4 컬렉션의 확장 함수 (0) | 2021.09.09 |
Do it! 코틀린 프로그래밍, 09-3 Set과 Map 활용하기 (0) | 2021.09.02 |
Do it! 코틀린 프로그래밍, 09-2 List 활용하기 (0) | 2021.08.28 |