我有一个应用程序,每小时监听一次外部订阅源,并接收源JSON,这是一个分块传输编码流,feed的监听器将块写入文件,在整个流完成后,另一个线程解析该文件和提取数据.但是现在在写文件时,即使我在写入时指定了字符集,数据也是以二进制格式写入的.
public void writeToFile(InputStream in){
File feedFile = new File("/tmp/feed.json");
try {
FileUtils.touch(feedFile);
StringWriter writer = new StringWriter();
IOUtils.copy(in, writer, StandardCharsets.UTF_8);
FileUtils.write(feedFile, writer.toString(), StandardCharsets.UTF_8,true);
} catch (IOException e) {
logger.error(Constants.FAILED_TO_WRITE_FEED_INTO_FILE,e);
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码在windows和linux box上工作正常,但是在docker容器里面以二进制格式编写.
Docker容器使用Centos7
我有一个服务器,该服务器为给定请求传输数据,以下是执行该功能的方法
@Override
public void getChangeFeed(ChangeFeedRequest request, StreamObserver<ChangeFeedResponse> responseObserver) {
long queryDate = request.getFromDate();
long offset = request.getPageNo();
ChangeFeedResponse changeFeedResponse = processData(responseObserver, queryDate, offset);
while(true){
if(changeFeedResponse!=null && !changeFeedResponse.getFinalize()){
responseObserver.onNext(changeFeedResponse);
changeFeedResponse = processData(responseObserver, changeFeedResponse.getToDate(), changeFeedResponse.getPageNo());
}else{
break;
}
}
responseObserver.onNext(changeFeedResponse);
responseObserver.onCompleted();
}
Run Code Online (Sandbox Code Playgroud)
当客户端断开连接时,服务器仍继续处理,这可能在多个客户端获取数据时出现。需要知道如何告诉服务器停止处理
我使用 redis 作为分布式系统的集中缓存。目前我正在使用 jedis 连接到 redis 集群,在那里我将值存储为字节 [] 而不是字符串。我的问题是存储纯字符串或字节 [] 对获取数据有影响。在我的应用程序中,我序列化了我的 java pojo 对象并转换为字节 [] 然后存储,因为我可以将它转换为 json 并存储,所以在从 redis 获取它时,我可以很容易地使用该对象而不是反序列化。我都试过了,但我能看到的唯一区别是反序列化的额外步骤