侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 290 篇文章
  • 累计创建 57 个标签
  • 累计收到 98 条评论

Kotlin I/O 的基本介绍

Z同学
2022-06-07 / 0 评论 / 3 点赞 / 333 阅读 / 2,003 字
温馨提示:
本文最后更新于 2022-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.I/O介绍

这篇主要就是介绍Kotlin中的I/O流的使用,相较于Java上的I/O使用,Kotlin中要简洁不少。

I:Input 输入的意思。O:Output 输出的意思。

Kotlin中,将数据的输入和输出操作称为流,这里的流是一组有序的数据序列,像河流一样流动的。

通常统称输入输出为I/O。

2. 字节与字符流

针对流的输入输出,根据数据的格式分为字节流字符流

  • 字节流:以字节为单位的数据传输流,默认没有缓冲区,编码采用ASCII编码,适合二进制文件数据传输。
  • 字符流:以字符为单位的数据传输流,有缓冲区,编码采用unicode编码。

Kotlin是基于Java的,所以在Kotlin中字节和字符流就是java中的字节和字符流。

字节流列表:

所有InputOutput都是成对出现的,一个负责输出,一个负责输入。其次所有字节流的类的后缀都是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而已,我们如果想弄明白使用关系使用最简单的InputStreamOutputStream

会比较方便我们弄明白这两者的关系。

Kotlin中针对这两个基础抽象类进行了不少的封装,可以方便我们快速使用。相关封装在kotlin.io.ByteStreamsKt.class中可以看到。

image-20220607180801951

针对上面的函数进行简单的说明一下。

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  //返回一个字节数组输入流,可以自定义字节编码

下篇将会结合实际使用场景来理解相关函数的作用。

3

评论区