1.I/O介绍
这篇主要就是介绍Kotlin
中的I/O流的使用,相较于Java
上的I/O使用,Kotlin
中要简洁不少。
I:Input 输入的意思。O:Output 输出的意思。
在Kotlin
中,将数据的输入和输出操作称为流,这里的流是一组有序的数据序列,像河流一样流动的。
通常统称输入输出为I/O。
2. 字节与字符流
针对流的输入输出,根据数据的格式分为字节流和字符流。
- 字节流:以字节为单位的数据传输流,默认没有缓冲区,编码采用ASCII编码,适合二进制文件数据传输。
- 字符流:以字符为单位的数据传输流,有缓冲区,编码采用unicode编码。
Kotlin
是基于Java
的,所以在Kotlin
中字节和字符流就是java
中的字节和字符流。
字节流列表:
所有Input
和Output
都是成对出现的,一个负责输出,一个负责输入。其次所有字节流的类的后缀都是Stream
。在这方面,命名是比较规范的。
类名 | 描述 |
---|---|
InputStream | 输入流(基类) |
FileInputStream | 文件输入流 |
ByteArrayInputStream | 字节数组输入流 |
PipedInputStream | 管道输入流,(多线程数据传输) |
FilterInputStream | 过滤输入流,(装饰类,可以扩展其他输入流) |
BufferedInputStream | 缓冲输入流(扩展FilterInputStream实现的子类) |
DataInputStream | 数据输入流(扩展FilterInputStream实现的子类) |
AudioInputStream | 音频输入流 |
OutputStream | 输出流(基类) |
FileOutStream | 文件输出流 |
ByteArrayOutputStream | 字节数组输出流 |
PipedInputStream | 管道输出流 |
FilterOutStream | 过滤输出流 |
BufferedOutputStream | 缓冲输出流 |
DataOutputStream | 数据输出流 |
AudioOutputStream | 音频输出流 |
... | ... |
上面还有部分扩展的类没有进行介绍,这里也只是介绍一个大概的情况。
字符流列表:
相较于字节流那么规整的命名方式,在字符流中reader
代表输入,writer
代表输出。
类名 | 描述 |
---|---|
Reader | 字符输入流(基类) |
FileReader | 文件输入流 |
CharArrayReader | 字符数组输入流 |
PipedReader | 管道输入流 |
FilterReader | 过滤输入流(装饰类,可以扩展其他输入流) |
BufferedReader | 缓冲输入流 |
InputStreamReader | 字节转换字符输入流 |
Writer | 字符输出流(基类) |
FileWriter | 文件输出流 |
CharArrayWriter | 字符数组输出流 |
PipedWriter | 管道输出流 |
FilterWriter | 过滤输出流 |
BufferedWriter | 缓冲输出流 |
OutputStreamWriter | 字节流转字符输出流 |
从上面的列表中,我们就可以看出来。一个输出那么就一定有一个输入。两者是成对出现的,我们在使用过程中也是成对的进行
3. 基础函数
从上面的表格中,可以得出有很多的输入输出,那么我们在实际使用过程中从哪里进行入手呢?从基类进行入手。
后续的几个扩展全是针对特定情况下的官方提供的一些api而已,我们如果想弄明白使用关系使用最简单的InputStream
和OutputStream
。
会比较方便我们弄明白这两者的关系。
在Kotlin
中针对这两个基础抽象类进行了不少的封装,可以方便我们快速使用。相关封装在kotlin.io.ByteStreamsKt.class中可以看到。
针对上面的函数进行简单的说明一下。
代码语言:javascript复制fun InputStream.buffered(bufferSize: kotlin.Int ):BufferedInputStream //返回一个自定义缓冲区大小的字节输入流 fun OutputStream.buffered(bufferSize: kotlin.Int): BufferedOutputStream //返回一个自定义缓冲区大小的字节输出流fun InputStream.bufferedReader(charset: java.nio.charset.Charset): BufferedReader //返回字符缓冲区输入流(可以自定义字符集,默认为Utf-8)fun OutputStream.bufferedWriter(charset: java.nio.charset.Charset ): BufferedWriter //返回字符缓冲输出流(可以自定义字符集,默认为utf-8)fun kotlin.String.byteInputStream(charset: java.nio.charset.Charset): ByteArrayInputStream //返回一个字节数组输入流,可以自定义字节编码
下篇将会结合实际使用场景来理解相关函数的作用。