myfreax

dart 转换字符串为二进制流

dart转换字符串为二进制流,下面的代码将字符串转换为二进制流stream,并管道到grep进程

2 min read
By myfreax
dart 转换字符串为二进制流
dart 转换字符串为二进制流

在Linux,很多命令都接受标准输入作为命令的参数。比如grepecho命令都是可以接受标准输入作为命令的参数。

grep命令的全称是全局正则表达式打印,它是Linux中功能最强大且最常用的命令之一。

grep在一个或多个输入文件中搜索与指定模式匹配的行,并将匹配行写入标准输出。如果未指定文件,grep则从标准输入读取内容。

在本教程中,我们将在dart创建进程运行grep命令并将通过管道传递字符串作为grep命令的参数,参数将作为grep命令的标准输入传递。

在dart,进程的标准输入仅接受一个参数并且类型是Stream,因此不能直接传递字符串给进程的标准输入。

必须在传递给进程的标准输入之前将字符串转换为二进制流。转换字符串为二进制流,这涉及两个步骤的操作。

第一步是将字符串转换为二进制的的值,在这一步骤中,dart内置Utf8Codec对象encode方法可以帮助我们转换字符串为二进制。

第二步使用二进制的值创建流Stream。Stream对象value函数从指定的值创建流Stream。

value函数可以接受任意类型的值。如果传递给value函数的值是二进制类型,将会返回一个二进制流Stream<int>

最后,我们就可以使用Stream管道pipe函数传递到进程的标准输入。

在下面的示例中,我们将启动grep命令的进程,grep进程将在标准输入中读取参数搜索hello字符串。

import 'dart:io';
import 'dart:convert';

main() async {
  var grep = await Process.start('grep', ['hello']);
  Stream.value(const Utf8Codec().encode(server)).pipe(grep.stdin);
}

Related Articles