栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

WebFlux 框架对 request 的 InputStream 和 response 的 OutputStream 的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WebFlux 框架对 request 的 InputStream 和 response 的 OutputStream 的使用

说到 WebFlux 就要提到和对比 Servlet,这样也是为了保留和尽量靠近传统代码的实现逻辑,所以最常用的就是对请求的输入流和响应的输出流处理。

在 Servlet 中获取输入流和输出流
HttpServletRequest request;
HttpServletResponse response;

InputStream inputStream = request.getInputStream();
OutputStream outputStream = response.getOutputStream();
在 WebFlux 中获取输入流和输出流

1、OutputStream 输出流的应用代码片段示例

public Mono handle(ServerHttpResponse response) {	
	DataBuffer dataBuffer = response.bufferFactory().allocateBuffer();
	// 获得 OutputStream 的引用
	OutputStream outputStream = dataBuffer.asOutputStream();
	// 操作 outputStream 往里面写入数据
	......
	......
	......
	// 将 dataBuffer 输出到 response
	return response.writeWith(Mono.just(dataBuffer));
}

2、InputStream 输入流的应用代码片段示例

public Mono handle(ServerHttpRequest request) {	
    return request.getBody().collect(ServerHttpConnection.InputStreamCollector::new,
                            (t, dataBuffer) -> t.collectInputStream(dataBuffer.asInputStream()))
           .flatMap(inputStreamCollector -> {
               // 将输入流多个dataBuffer合并为一个InputStream后使用
               InputStream requestInputStream = inputStreamCollector.getInputStream();
			   // 操作 inputStream 读取数据并处理
			   ......
			   ......
			   ......
			   // 这里返回 empty 只是示例,实际使用根据自己需求返回对应数据
               return Mono.empty();
           });
}

其中合并多个 InputStream 使用 Java 的 SequenceInputStream 来处理,以下为内部类代码

static class InputStreamCollector {

    private InputStream is;

    public void collectInputStream(InputStream is) {
        if (this.is == null) this.is = is;
        this.is = new SequenceInputStream(this.is, is);
    }

    public InputStream getInputStream() {
        return this.is;
    }
}

以上关于输入和输出流的代码可以应用于文件的上传和下载。


(END)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号