gpt4 book ai didi

java - 将 BufferedOutputStream 转换为用于 Jersey REST 响应的 InputStream

转载 作者:行者123 更新时间:2023-12-01 11:44:46 27 4
gpt4 key购买 nike

在我的 getfile() REST 方法中,我有一个 BufferedOutputStream,它正在填充 restDAO.readData() 调用上的数据。此代码之前在响应中的文件中传递了一个字节数组,但由于内存限制,我们正在尝试实现流式传输。据我所知,Response.ok() 方法需要返回 InputStream 的实现。

遗憾的是,我无权更改 readData 方法,并且无法使用 easyStream API。

使用适当的流技术将 BufferedOutputStream 中的数据放入 InputStream 中的最佳方法是什么? (不转换为字节数组)

@GET
public Response getFile(@Context javax.ws.rs.core.HttpHeaders headers) throws Exception{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteArrayOutputStream);

// Stream is filled with data in this method.
restDAO.readData(bufferedOutputStream);

// How do I take data from bufferedOutputStream and put it into inputStream?
// InputStream inputStream = ?

return Response.ok(inputStream, mimeType).header("filename", getFileName()).build();
}

最佳答案

最简单的方法是返回 StreamingOutput对象:

Object body = new StreamingOutput() {
@Override
public void write(OutputStream out)
throws IOException {
final BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(out);

// Stream is filled with data in this method.
restDAO.readData(bufferedOutputStream);
}
};

return Response.ok(body, mimeType).header("filename", getFileName()).build();

关于java - 将 BufferedOutputStream 转换为用于 Jersey REST 响应的 InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29241896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com