- Reader 抽象类
- Writer 抽象类
- 案例:文件复制
想掌握字符流的API,首先要熟悉它的两个抽象类:Reader
和 Writer
,并了解它们有哪些主要的函数。
一、Reader 抽象类
Reader
是字符输入流的根类,影响着字符输入流的行为,Kotlin 为 Reader
类定义了很多扩展函数和属性,下面是一些主要的扩展函数。
(1). 返回字符缓冲区输入流:
fun Reader.buffered(
bufferSize: Int = DEFAULT_BUFFER_SIZE // 缓冲区大小
): BufferedReader
(2). 从输入流中复制数据到输出流,返回复制的字符数:
fun Reader.copyTo(
out: Writer,
bufferSize: Int = DEFAULT_BUFFER_SIZE
): Long
(3). 遍历输入流中的每一行数据,对每一行数据进行处理,完成之后关闭流:
fun Reader.forEachLine(action: (String) -> Unit)
(4). 读取输入流中的数据到一个 List 集合,每一个行数据是一个元素,完成之后关闭流:
fun Reader.readLines(): List<String>
(5). 读取输入流中的数据到字符串中:
fun Reader.readText(): String
二、Writer 抽象类
Writer
是字符输出流的根类,影响着字符输出流的行为,Kotlin 为 Writer
类定义了一个扩展函数 buffered
,buffered
函数返回字符缓冲区输出流,其定义如下:
fun Writer.buffered(
bufferSize: Int = DEFAULT_BUFFER_SIZE
): BufferedWriter
三、案例:文件复制
实现文件复制,数据源是文件,所以用到文件输入流 FileReader
,数据目的地也是文件,所以用到了文件输出流 FileWriter
。
FileReader
和 FileWriter
都属于底层流,在实际开发时为了提高效率可以使用缓冲流 BufferedReader
和 BufferredWriter
。
fun main(args: Array<String>?) {
FileReader("./TestDir/index.html").use { fileReader ->
FileWriter("./TestDir/subDir/index.html").use { fileWriter ->
val bufferInput = fileReader.buffered()
val bufferOutput = fileWriter.buffered()
bufferInput.copyTo(bufferOutput)
}
}
}
网友评论