Preface: In order to achieve the same effect as ChatGPT: the text is displayed one by one, and the backend needs to be in the form of a stream when it returns .
Table of contents
1. String stream
@PostMapping("returnStream")
public void returnStream(HttpServletResponse response) throws IOException {
String message = "我是一段等待已流形式返回的文字";
// 以流的形式返回
ServletOutputStream out = null;
ByteArrayOutputStream baos = null;
try {
InputStream inStream = new ByteArrayInputStream(message.getBytes());
byte[] buffer = new byte[1024];
int len;
baos = new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
out = response.getOutputStream();
out.write(baos.toByteArray());
} catch (Exception e) {
e.printStackTrace();
} finally {
Objects.requireNonNull(baos).flush();
baos.close();
Objects.requireNonNull(out).flush();
out.close();
}
}
2. File flow
ServletOutputStream out = null;
ByteArrayOutputStream baos = null;
try {
File file=new File(filename);
InputStream inStream=new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
baos = new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
out = response.getOutputStream();
out.write(baos.toByteArray());
} catch (Exception e) {
e.printStackTrace();
} finally {
baos.flush();
baos.close();
out.flush();
out.close();
}