对象 BufferedStream
缓存读取对象
BufferedStream 对象是一个用于二进制流读取的缓存流对象。它可以对其底层流进行缓存,并提供文本读取能力。在使用 BufferedStream 对象时,只需要将待处理的流对象作为构造参数传入即可。创建方法:
1var reader = new io.BufferedStream(stream);
BufferedStream 继承自 Stream 对象,具有 Stream 对象的所有方法和属性。其中,stream 属性用于查询创建缓存对象时的流对象。BufferedStream 对象还支持 EOL 属性用于查询和设置行结尾标识(缺省时,posix:\"\n\";windows:\"\r\n\")以及 charset 属性用于查询和设置当前对象处理文本时的字符集,缺省为 utf-8。
BufferedStream 对象在读取流数据时,采用分块的方式,先将数据读入到缓冲区中,再从缓冲区中获取数据,这样可以有效减少读取流数据时的网络交互次数,提高了读取效率。
BufferedStream 对象还提供了 write 方法将给定的数据写入流,并在底层流对象处于写入阻塞时,等待其可以接受数据后再进行下一步操作。Flush 方法将文件缓冲区内容写入物理设备。close 方法关闭当前流对象。部分方法的具体实现可以在子类中进行实现。
在使用 BufferedStream 对象时,需要注意不要将其与其他已经在使用的底层流对象混用,否则可能会导致数据重复读取或者读取错误。
下面是一个使用 BufferedStream 对象读取文件内容的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19var fs = require('fs');
var io = require('io');
var filename = "test.txt";
// open file
var file = fs.openFile(filename);
// create BufferedStream object
var reader = new io.BufferedStream(file);
// read file content
var lines = reader.readLines();
for (var i = 0; i < lines.length; i++)
console.log(lines[i]);
// close file
file.close();
继承关系
构造函数
BufferedStream
BufferedStream 构造函数
1new BufferedStream(Stream stm);
调用参数:
- stm: Stream, BufferedStream 的二进制基础流对象
成员属性
stream
Stream, 查询创建缓存对象时的流对象
1readonly Stream BufferedStream.stream;
charset
String, 查询和设置当前对象处理文本时的字符集,缺省为 utf-8
1String BufferedStream.charset;
EOL
String, 查询和设置行结尾标识,缺省时,posix:\"\n\";windows:\"\r\n\"
1String BufferedStream.EOL;
fd
Integer, 查询 Stream 对应的文件描述符值, 由子类实现
1readonly Integer BufferedStream.fd;
成员函数
readText
读取指定字符的文本
1String BufferedStream.readText(Integer size) async;
调用参数:
- size: Integer, 指定读取的文本字符个数,以 utf8 或者指定的编码字节数为准
返回结果:
- String, 返回读取的文本字符串,若无数据可读,或者连接中断,则返回 null
readLine
读取一行文本,行结尾标识基于 EOL 属性的设置,缺省时,posix:\"\n\";windows:\"\r\n\"
1String BufferedStream.readLine(Integer maxlen = -1) async;
调用参数:
- maxlen: Integer, 指定此次读取的最大字符串,以 utf8 编码字节数为准,缺省不限制字符数
返回结果:
- String, 返回读取的文本字符串,若无数据可读,或者连接中断,则返回 null
readLines
以数组方式读取一组文本行,行结尾标识基于 EOL 属性的设置,缺省时,posix:\"\n\";windows:\"\r\n\"
1Array BufferedStream.readLines(Integer maxlines = -1);
调用参数:
- maxlines: Integer, 指定此次读取的最大行数,缺省读取全部文本行
返回结果:
- Array, 返回读取的文本行数组,若无数据可读,或者连接中断,空数组
readUntil
读取一个文本字符串,以指定的字节为结尾
1
2String BufferedStream.readUntil(String mk,
Integer maxlen = -1) async;
调用参数:
- mk: String, 指定结尾的字符串
- maxlen: Integer, 指定此次读取的最大字符串,以 utf8 编码字节数为准,缺省不限制字符数
返回结果:
- String, 返回读取的文本字符串,若无数据可读,或者连接中断,则返回 null
writeText
写入一个字符串
1BufferedStream.writeText(String txt) async;
调用参数:
- txt: String, 指定写入的字符串
writeLine
写入一个字符串,并写入换行符
1BufferedStream.writeLine(String txt) async;
调用参数:
- txt: String, 指定写入的字符串
read
从流内读取指定大小的数据
1Buffer BufferedStream.read(Integer bytes = -1) async;
调用参数:
- bytes: Integer, 指定要读取的数据量,缺省为读取随机大小的数据块,读出的数据尺寸取决于设备
返回结果:
- Buffer, 返回从流内读取的数据,若无数据可读,或者连接中断,则返回 null
write
将给定的数据写入流
1BufferedStream.write(Buffer data) async;
调用参数:
- data: Buffer, 给定要写入的数据
flush
将文件缓冲区内容写入物理设备
1BufferedStream.flush() async;
close
关闭当前流对象
1BufferedStream.close() async;
copyTo
复制流数据到目标流中
1
2Long BufferedStream.copyTo(Stream stm,
Long bytes = -1) async;
调用参数:
- stm: Stream, 目标流对象
- bytes: Long, 复制的字节数
返回结果:
- Long, 返回复制的字节数
toString
返回对象的字符串表示,一般返回 "[Native Object]",对象可以根据自己的特性重新实现
1String BufferedStream.toString();
返回结果:
- String, 返回对象的字符串表示
toJSON
返回对象的 JSON 格式表示,一般返回对象定义的可读属性集合
1Value BufferedStream.toJSON(String key = "");
调用参数:
- key: String, 未使用
返回结果:
- Value, 返回包含可 JSON 序列化的值