文章
Vert.x 教程(六)
异步数据和事件流
# 1、统一的流模型
Vert.x提供了跨资源类型(如文件、网络套接字)的各种流的统一抽象。“读取流”是指可供读取的事件源,而“写入流”是指事件发往目的地。例如,HTTP请求就是一个读取流,HTTP响应则是一个写入流(这里的读取和写入是针对服务端而言的,并不是客户端)。
Vert.x中读写流分别由io.vertx.core.streams包的ReadStream和WriteStream两个接口定义。大多数情况下,开发人员都是跟实现了这两个接口的API打交道,而不必自己实现他们。
**ReadStream的基本方法**
| 方法 | 描述 |
|---|---|
| handler(Handler<T>) | 处理新读到的类型T的数据(如Buffer、byte、JsonObject等) |
| exceptionHandler<Handler<Throwable>> | 处理读取异常 |
| endHandler(Handler<Void>) | 流关闭时被调用(可能时因为数据被读完或出现异常) |
**WriteStream的基本用法**
| 方法 | 描述 |
|---|---|
| write(T) | 写入类型T的数据(如Buffer、byte、JsonObject等) |
| exceptionHandler<Handler<Throwable>> | 处理读取异常 |
| end() | 关闭流 |
| end(T) | 写入类型T的数据,再关闭流 |
对比JDK I/O读取文件和Vert.x的I/O读取文件
package com.chapter4;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Example1 {
public static void main(String[] args) {
File file = new File("LICENSE");
byte[] data = new byte[1024];
try (FileInputStream fis = new FileInputStream(file)) {
int bytesRead = fis.read(data);
while (bytesRead != -1) {
System.out.println(new String(data, 0, bytesRead));
bytesRead = fis.read(data);
}
} catch (IOException e) {
System.err.println("Error reading file: " + e.getMessage());
}finally {
System.out.println("File reading completed!");
}
}
}