[kotlin] 파일 I/O 최적화 방법
파일 입력 및 출력(IO)는 많은 프로그램에서 중요한 부분입니다. 대용량 파일의 처리나 빠른 속도가 요구되는 경우, 파일 I/O의 최적화가 필요합니다. 이 글에서는 Kotlin
에서 파일 I/O를 최적화하는 방법을 다룰 것입니다.
1. Buffer를 활용한 파일 I/O
파일을 읽거나 쓸 때, Buffer를 이용하여 한 번에 여러 바이트를 읽거나 쓰는 것이 효율적입니다. 이를 위해 BufferedReader
와 BufferedWriter
를 사용할 수 있습니다.
import java.io.*
val inputFile = File("input.txt")
val bufferedReader = BufferedReader(FileReader(inputFile))
var line: String?
while (bufferedReader.readLine().also { line = it } != null) {
// 파일의 내용을 처리
}
bufferedReader.close()
val outputFile = File("output.txt")
val bufferedWriter = BufferedWriter(FileWriter(outputFile))
bufferedWriter.write("Output data")
bufferedWriter.close()
2. NIO 사용하기
Java NIO(Non-blocking I/O)
는 Kotlin
에서 파일 I/O를 효율적으로 처리하는 데 도움을 줍니다. FileChannel
을 사용하여 파일의 내용을 읽거나 쓸 수 있으며, MappedByteBuffer
를 이용하여 파일을 메모리에 매핑하여 처리할 수도 있습니다.
import java.io.*
import java.nio.*
import java.nio.channels.*
val inputFile = File("input.txt")
val inputStream = FileInputStream(inputFile)
val inputChannel = inputStream.channel
val buffer = ByteBuffer.allocate(48)
inputChannel.read(buffer)
3. 병렬 파일 I/O
대용량 파일의 처리 시, 병렬 파일 I/O를 사용하여 처리속도를 높일 수 있습니다. Kotlin
에서는 coroutine
을 사용하여 간단하게 병렬 파일 I/O를 구현할 수 있습니다.
import kotlinx.coroutines.*
import java.io.*
suspend fun readFile(fileName: String): String {
return withContext(Dispatchers.IO) {
File(fileName).readText()
}
}
fun main() {
runBlocking {
val result1 = async { readFile("file1.txt") }
val result2 = async { readFile("file2.txt") }
println("File 1 contents: ${result1.await()}")
println("File 2 contents: ${result2.await()")
}
}
파일 I/O의 성능을 향상시키기 위해 위의 방법들을 고려해 볼 수 있습니다. 특히 대용량 파일 처리나 빠른 파일 I/O가 필요한 경우, 이러한 최적화 기술들을 적용하여 성능을 향상시킬 수 있습니다.
참고문헌: