我想知道用什么技术和/或库来实现linux命令"tail -f"的功能.我基本上是在寻找一个附加/替换的下降java.io.FileReader.客户端代码可能如下所示:
TailFileReader lft = new TailFileReader("application.log");
BufferedReader br = new BufferedReader(lft);
String line;
try {
while (true) {
line= br.readLine();
// do something interesting with line
}
} catch (IOException e) {
// barf
}
Run Code Online (Sandbox Code Playgroud)
缺失的部分是合理的实施TailFileReader.它应该能够读取文件打开前存在的文件部分以及添加的行.
这是场景:
有可能做这样的事吗?
如果没有,还有另一种方法可以做这样的事吗?
我有以下JAX-RS服务端点的示意图实现:
@GET
@Path("...")
@Transactional
public Response download() {
java.sql.Blob blob = findBlob(...);
return Response.ok(blob.getBinaryStream()).build();
}
Run Code Online (Sandbox Code Playgroud)
调用JAX-RS端点将从数据库中获取Blob(通过JPA)并将结果传回HTTP客户端.使用Blob和流而不是例如JPA的初始BLOB到byte []映射的目的是防止所有数据必须保存在内存中,而是直接从数据库流式传输到HTTP响应.
这按预期工作,我实际上不明白为什么.我是否从与底层JDBC连接和事务关联的数据库中获取Blob句柄?如果是这样,我会期望在从download()方法返回时提交Spring事务,这使得JAX-RS实现以后无法从Blob访问数据以将其流回HTTP响应.