46

Flutter dart:io 库

 4 years ago
source link: https://www.tuicool.com/articles/EZr6VfR
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

奇技指南

本文是Flutter系列第四篇文章,阅读本文

你将得到什么:

1、dart:io 是什么?

2、dart:io 使用

3、dart:io 组成部分

4、dart:io 总结

本文来自奇舞移动技术

dart:io 是什么

dart:io 支持对非web应用程序的文件、套接字、HTTP 和其他 I/O 操作。换句话说,不支持基于浏览器的应用程序。只有服务器、命令行脚本和Flutter移动应用程序,才能导入和使用 dart:io 库。

基于 dart:io 我们可以处理文件、目录、套接字、进程、HTTP 服务器和客户端。使用 Futures 或 Streams 来处理异步的输入和输出相关操作。异步都在 dart:async 库中定义

dart:io 使用

在使用这个库时,将其导入,代码如下:

import 'dart:io';

dart:io 操作文件、目录和连接

您可以通过这些类型的对象操作文件系统。例如,您可以重命名一个文件或目录:

文件、目录和链接类提供的许多方法,他们都是异步运行的,最后返回一个Future。

FileSystemEntity

文件、目录和链接都是FileSystemEntity的扩展。除了作为这些类的超类之外,FileSystemEntity还有许多用于处理路径的静态方法。如 "isDirectory"、"isFile" 和 "exists" 等等,来获取文件相关的信息。

HttpServer 和 HttpClient

HttpServer 提供实现 HTTP 服务端的基本功能。

HttpServer 提供了 HttpRequest 对象的流。每个 HttpRequest 都对应一个 HttpResponse 对象。服务端通过写入 HttpResponse 对象来响应请求。下面代码示例展示如何将HttpServer 绑定到端口 80 上的 IPv6 因特网地址,以及如何侦听请求。

对于一些更高级的构建模块,建议尝试一下用于 Dar 的 Web 服务器中间件 shelf 包 ,它包含一组高级类,以及这个库中的 HttpServer 类,更容易实现 HTTP 服务器业务。

HttpClient 提供客户端的基本功能。

HttpClient client = new HttpClient();

client.getUrl(Uri.parse("http://www.example.com/"))

.then((HttpClientRequest request) {

// 可选地设置标题…

// 可选地写入请求对象…

// 然后调用关闭

return request.close();

})

.then((HttpClientResponse response) {

// 处理响应逻辑

...

});

Process

Pr ocess 类提供了运行进程的方法。

例如,下面的代码生成一个进程,递归列出 web 下的文件列表

调用 start() 方法时返回一个 Future 对象。在运行时,我们是可以操作当前的process,达到想要的目的。另外需要注意在使用 start( ) 时,必须读取 stdout 和 stderr 流的所有数据,否则系统资源不会被释放。

调用 run 方法时,它将以 ProcessResult 对象结束当前进程。run方法不返回进程对象,这的话,我们的代码就不能与当前的process进行交互。

WebSocket

WebSocket 提供了 web 套接字协议,它支持客户端与服务端的应用程序之间进行全双工通信。web 套接字服务端使用普通 HTTP 来接受套接字连接。初始握手是一个 HTTP 请求,然后升级为 web 套接字连接。服务端使用 WebSocketTransformer 升级请求,并侦听返回的 web 套接字上的数据。例如,这里有一个服务端监听 WebSocket 上的 “ws” 数据:

runZoned(() async {

var server = await HttpServer.bind('127.0.0.1', 4040);

server.listen((HttpRequest req) async {

if (req.uri.path == '/ws') {

var socket = await WebSocketTransformer.upgrade(req);

socket.listen(handleMsg);

}

});

}, onError: (e) => print("An error occurred."));

客户端连接示例

调用 connect 方法连接到服务端的套接字服务,调用 add 方法往套接字内写入数据。

ServerSocket 和 Socket

ServerSocket 和 Socket

客户端与服务端基于TCP协议进行通信的。服务端用 ServerSocket ,客户端用 Socket 。服务端的 ServerSocket 调用 bind 创建套接字,然后再监听访问进来的套接字请求。服务端示例:

客户端用 connect 方法建立套接字连接,也会返回一个Future。我们可以调用 write(), writeln(),或者 writeAll() 等方法通过套接字发送消息出去。客户端示例:

除了 Socket 和 ServerSocket 之外,RawSocket 和 RawServerSocket 也可用于对异步套接字 IO 的低级访问。

RawSocket 是 TCP 套接字的非缓冲接口。它以与底层操作系统相同的块传输数据流。它不同与POSIX 原始套接字,感兴趣可以异步这里了解。

标准的输出、错误、输入流

dart:io 库提供了标准的输出、错误和输入流,分别名为 stdout、 stderr和 stdin。

stdout 和 stderr 都是从 IOSinks 继承属性和方法。

stdout 写入字符串:

stdout.writeln (“Hello, World !”);

stderr 写入对象列表:

stderr.writeAll([ 'That ', 'is ', 'an ', 'error.', '\n']);

stdin 是从 Stream 类 继承属性和方法。

示例命令行同步读取文本:

String inputText = stdin.readLineSync();

一直监听等待用户输入信息。

dart:io 是什么

1、牵涉到异步操作的地方,都会返回Future对象。

2、简单介绍了dart:io,具体在使用时,应详细参考官方每节内容。

最新活动

随着运维工作从规模和复杂度多方面的爆炸式增长,传统的运维手段已经无法满足如今业务系统运维管理的需求。AI 技术日趋成熟,智能运维(AIOps)应运而生,给运维行业带来了很多的变革和机会,并逐渐成为一种新的发展趋势。

如何将大数据和机器学习的方法引入运维的各个领域方向?如何搭建一套高效的运维平台?如何快速落地AIOps?本次沙龙围绕这些问题,邀请多位专家共同探索AIOps落地实践。

ErI3mmV.jpg!web

精彩内容都在

3

60互联网技术训练营第18期——AIOps落地实践探索

识别下方 二维码 或点击 阅读原文 ,立即报名

ryIRneA.jpg!web

界世的你当不

只做你的肩膀

uMVjQz3.jpg!web

jyEVBbM.jpg!web

360官方技术公众号 

技术干货|一手资讯|精彩活动

空·

点一下阅读原文了解更多资讯哦

mERnQzf.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK