gpt4 book ai didi

java - ResponseEntity> 是否将所有内容都存储在内存中?

转载 作者:行者123 更新时间:2023-12-03 21:42:59 26 4
gpt4 key购买 nike

这似乎是一个简单的问题,但我找不到答案。
在 spring-boot 中,我有一个返回 json 的 Controller 方法:

@GetMapping
public ResponseEntity<Stream<MyObject>> get() {
return ResponseEntity
.ok()
.contentType(MEDIA_JSON)
.body(service.stream());
}

这是正确地流式传输给用户(以块为单位)还是在返回给用户之前将整个流加载到内存中?

最佳答案

我在文档中没有找到任何内容,但是可以尝试查看它的行为方式。
让我们创建 2 个端点和一个无限的对象流:

@RestController
public class MyController {

@GetMapping("/stream")
public ResponseEntity<Stream<MyObject>> stream() {
return ResponseEntity.ok(getStream());
}

@GetMapping("/nostream")
public ResponseEntity<List<MyObject>> noStream() {
return ResponseEntity.ok(getStream().collect(Collectors.toList()));
}

private Stream<MyObject> getStream() {
return IntStream.iterate(0, i -> i + 1)
.mapToObj(i -> new MyObject());
}

static class MyObject {

private String name = "foo";

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
}
调用 http://localhost:8080/stream 将立即响应,生成无限序列 [{"name":"foo"},{"name":"foo"}...如果您分析应用程序,您可以看到它可以继续运行几分钟而不会增加内存使用量:
Profiling with stream
相反,调用 http://localhost:8080/nostream 端点将很快导致 java.lang.OutOfMemoryError :
Profiling without stream

关于java - ResponseEntity<Stream<MyObject>> 是否将所有内容都存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66348194/

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