I/O操作

I/O操作

一般情况下,将应用程序与外部数据源交互的操作称之为 I/O 操作。I 对应输入(Input),O 对应输出(Output),数据流是一串连续的数据集合,它就像承载数据的管道,在管道的一端输入数据,在管道的另一端输出数据。例如通过vino操作文件、网络连接、内存缓冲区等。

vino使用Writer来表示输出流,使用Reader来表示输入流。

  • 输出流(Writer)

Writer是一个接口,定义了向目标写入数据的方法。它提供了一种将数据从程序内部传输到外部资源的机制.

  • 输入流(Reader)

Reader是一个接口,定义了从数据源读取数据的方法。它提供了一种将数据从外部资源传输到程序内部的机制。

Writer

Writer表示一个输出流接口,只要实现了该接口的对象都可以作为Writer来使用。

vino中实现Writer接口的对象有:BufferFileConnect

接口的方法定义

名称类型参数返回值说明
write方法data:Readerint将内存中的Reader写入到当前Writer对象
write方法data:string,charset?:stringint将内存中的字符串写入到当前Writer对象
close方法void关闭输出流

write

1. 输出Reader

当参数为一个Reader对象时,表示从Reader中读取数据,并将数据写入到当前Writer中。

语法

write(data:Reader)

示例1

将内存中的Buffer输出到Writer

//实际上WriterObject并不存在,这里只是用来表示需要创建一个实现了Writer接口的对象而已
let writer = new WriterObject()
//内存缓冲区,因为Buffer实现了Reader接口
let buf = new Buffer();
buf.write("123");
//将buf内容写入writer对象中
writer.write(buf);

示例2

从1个文件读取数据并写入另一个文件中,因为File对象实现了WriterReader接口,所以它即可以作为输出流也可以作为输入流。

//读取文件,将其视为一个输入流Reader
let fileReader = fs.openFile("/Users/vino/Desktop/1.txt", ["readOnly"]);
//创建新文件,将其视为一个输出流Writer
let fileWriter = fs.openFile("/Users/vino/Desktop/2.txt", ["create", "writeOnly"]);
//将1.txt内容写入2.txt中
fileWriter.write(fileReader)
//关闭输出流
fileWriter.close()
//关闭输入流
fileReader.close()

2. 输出字符串

将程序中的字符串输出到Writer

语法

write(data:string,charset?:string)

参数

  • data: 字符串
  • charset: (可选) 字符编码或解码方式。默认值:utf8
  • charset的取值范围(不区分大小写)
  1. utf8
  2. gbk
  3. gb1312
  4. gb18030
  5. base64
  6. hex 16进制字符串

示例1

将字符串写入输出流。

//实际上WriterObject并不存在,这里只是用来表示需要创建一个实现了Writer接口的对象而已
let writer = new WriterObject()
writer.write("abc");
//将汉字"中国"进行gbk编码后,写入输出流
writer.write("中国", "gbk");

示例2

将一个base64字符串进行解码后,写入到文件中

import {fs} from "core";
// base64字符串文件
let base64Str="MTIzNDU2"; 
//创建文件,File实现了Writer接口
let file = fs.openFile("/Users/vino/Desktop/1.bin", ["create", "readWrite"]);
//file对象作为输出流Writer,将内存中base64Str的数据写入文件
file.write(base64Str, "base64");
//关闭输出流
file.close();

close

用于关闭输出流

writer.close();

Reader

Reader表示一个输入流接口,只要实现了该接口的对象都可以作为Reader来使用。

vino中实现Reader接口的对象有:BufferFileBufferReaderConnect

接口的方法定义

名称类型参数返回值说明
read方法size?:intBuffer从输入流中读取数据到内存中
close方法void关闭输入流

read

从输入流中读取数据到内存中。

语法

read(size?:int)

参数

  • size: (可选)读取的字节长度。

示例1

//读取本地文件内容到内存中
let fileReader = fs.openFile("/Users/vino/Desktop/1.txt", ["readOnly"]);
//从文件中读取10个字节
let buffer = fileReader.read(10)
//关闭输入流
fileReader.close()

示例2

当未指定size参数时,表示从输入流中读取数据直到EOF(文件结束标志),这个函数非常方便,因为它允许你一次性读取一个数据流的全部内容。

//读取本地文件内容到内存中
let fileReader = fs.openFile("/Users/vino/Desktop/1.txt", ["readOnly"]);
//一次读取文件中的所有数据
let buffer = fileReader.read()
//关闭输入流
fileReader.close()

close

用于关闭输入流

reader.close();
更新时间 9/19/2024, 12:09:33 PM