【问题标题】:Using ByteArrayInputStream in Spring Webflux在 Spring Webflux 中使用 ByteArrayInputStream
【发布时间】:2019-12-12 16:48:30
【问题描述】:

我正在使用 Spring Webflux 接收文件 (DICOM) 和一个将这些文件转换为 Json 字符串 (DCM4CHE) 的库。 该库采用 InputStream 条目进行转换。 我想使用 ByteArrayInputStream 来保持堆栈的反应性。这是正确的还是我需要将调用包装在 Mono.defer(...) 或使用非反应性微服务?

public Mono<ServerResponse> toJson(ServerRequest request) {
    var flux = request.body(BodyExtractors.toParts())
            .ofType(FilePart.class)
            .map(FilePart::content)
            .flatMap(DataBufferUtils::join)
            .map(DataBuffer::asByteBuffer)
            .map(ByteBuffer::array)
            .map(ByteArrayInputStream::new)
            .map(theLib::convertToJson);
    return ServerResponse.ok().body(BodyInserters.fromPublisher(flux,String.class));
}

换句话说,ByteArrayInputStream 是否是某种阻塞代码?

谢谢

【问题讨论】:

    标签: java spring-webflux


    【解决方案1】:

    不,ByteArrayInputStream 没有阻塞。如果OutputStream out 被阻塞,则唯一可能阻塞的方法是long transferTo(OutputStream out)

    顺便说一句,而不是

        .map(DataBuffer::asByteBuffer)
        .map(ByteBuffer::array)
        .map(ByteArrayInputStream::new)
    

    你可以写

        .map(DataBuffer::asInputStream)
    

    【讨论】:

    • 奇怪的是,asInputStreamMethod产生的InputStream实例不能被lib使用。
    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2019-03-23
    • 2018-09-27
    • 2019-03-15
    • 2018-06-27
    • 2020-03-30
    相关资源
    最近更新 更多