仓颉开发之——IO流(16)

一 概述

  • IO流概念
  • 数据流分类

二 IO流概念

2.1 哪些操作

  1. 标准输入输出
  2. 文件操作
  3. 网络数据流
  4. 字符串流
  5. 加密流
  6. 压缩流等

2.2 分类

1-I 对应输入(Input)

  • 将数据从外存中读取到内存中的称为输入流
  • 输入端可以一段一段地向管道中写入数据
  • 数据源包括外界的键盘、文件、网络...
  • 用 InputStream表示输入流,提供read ,将数据写入到 buffer 中

示例

1
2
3
4
5
6
7
main() {
let input: InputStream = ...
let buf = Array<Byte>(256, item: 0)
while (input.read(buf) > 0) {
println(buf)
}
}

2-O 对应输出(Output)

  • 将数据从内存写入外存中的称为输出流
  • 输出端也可以一段一段地从管道中读出数据
  • 输出设备包含:显示器、打印机、文件、网络等
  • 用OutputStream表示输出流,提供 write 函数,将 buffer中数据写入到绑定的流中
  • 注意调用flush 刷新缓冲区

示例

1
2
3
4
5
6
main() {
let output: OutputStream = ...
let buf = Array<Byte>(256, item: 111)
output.write(buf)
output.flush()
}

三 数据流分类

3.1 节点流

1-概念

  • 直接提供数据源
  • 节点流的构造方式通常是依赖某种直接的外部资源(即文件、网络等)

2-常见节点流

常见的处理流包含 BufferedInputStream、BufferedOutputStream、StringReader、StringWriter、ChainedInputStream 等

3-示例

1
2
3
4
5
6
7
import std.fs.*

main() {
File.copy("./tempFile.txt", "./tempFile2.txt", false)
File.move("./tempFile2.txt", "./tempFile3.txt", false)
File.delete("./tempFile3.txt")
}

3.2 处理流

1-概念

  • 只能代理其它数据流进行处理
  • 处理流的构造方式通常是依赖其它的流

2-常见处理流

常见的处理流包含 BufferedInputStream、BufferedOutputStream、StringReader、StringWriter、ChainedInputStream 等。

3-示例

1
2
3
4
5
6
7
8
9
10
11
12
13
import std.io.*

main(): Unit {
let arr1 = b"0123456789"
let byteArrayStream = ByteArrayStream()
byteArrayStream.write(arr1)
let bufferedInputStream = BufferedInputStream(byteArrayStream)
let arr2 = Array<Byte>(20, item: 0)

/* 读取流中数据,返回读取到的数据的长度 */
let readLen = bufferedInputStream.read(arr2)
println(String.fromUtf8(arr2[..readLen])) // 0123456789
}

四 思维导图

五 参考

  • 仓颉官方文档—IO
  • 仓颉编程语言入门教程