Kotlin I/O

2023-07-14 10:56:05 浏览数 (1)

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中可以看到。

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

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

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

0 人点赞