我尝试了试验,最后我得到了一些积极的结果。
为了从 DB 直接流式传输到客户端浏览器,上述内容是有效的,但 InputStreamDataSource 应该是这样的:
public class InputStreamDataSource implements DataSource {
private InputStream inputStream;
public InputStreamDataSource(InputStream inputStream) {
this.inputStream = inputStream;
}
public InputStream getInputStream() throws IOException {
return inputStream;
}
public OutputStream getOutputStream() throws IOException {
throw new UnsupportedOperationException("Not implemented");
}
public String getContentType() {
return "*/*";
}
public String getName() {
return "InputStreamDataSource";
}
}
我害怕的是,一旦我自己关闭了输入流...... ws 客户端没有收到二进制内容......
比我检查,实际上 DataHandler 创建了一个新线程并关闭了输入流
我能够将 500MB 从 DB 快速流式传输到客户端,并且内存占用少!