我有一条简单的路线,例如:
from("direct:fooBar")
.pollEnrich()
.simple("file:in/?fileName=abc.txt")
.process(exchange -> {
// 1
exchange.getIn().getBody(String.class);
})
.split(body().tokenize("\n")).streaming().stopOnException()
.process(exchange -> {
// 2
exchange.getIn().getBody(String.class);
})
Run Code Online (Sandbox Code Playgroud)
abc.txt这是一个非常大的文件,因此我正在使用split并streaming减少内存开销。但是我可以抓取文件的内容1,因此我猜想使用时整个内容实际上都已加载到了内存中poolEnrich。
我的假设正确吗?
否pollEnrich不会将整个文件加载到内存中。文件端点只是为您提供了文件的文件句柄,例如java.io.File。
它的代码在处理器加载该文件到内存中,当你告诉骆驼到邮件正文转换为String。然后Camel将加载java.io.File到内存中,并以内容形式提供给您String。
因此,如果您想以流式方式阅读正文,String可以使用而不是InputStream。
与标记者分路器将使用java.util.Scanner读取该文件的数据块和块处理该块。这样就可以使用文件端点并通过读取它FileInputStream。
因此,除去自己的代码,你得到的消息体作为一个String和它应该将整个文件无法加载到内存中。
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |