在我的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();
}
答案 0 :(得分:1)
最简单的方法是返回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();