一.批量写入

Java写入大量数据到磁盘/数据库等其它第三方介质时,由于IO是比较耗费资源的操作,通常采用攒一批然后批量写入的模式

//通常构造一个缓存池,一个限制指标,可以是内存大小也可以是时间
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int size = 0;
for (byte[] aByte : bytes) {
//缓存池超过最大Size,进行一次刷新操作
if (size > SIZE_LIMIT) {
doWrite(args);
size = 0;
byteBuffer.reset();
}
size += aByte.length;
try {
byteBuffer.write(aByte);
} catch (IOException e) {
e.printStackTrace();
} }
//如果循环结束,但byte数组不为空,则进行最后一次刷新操作
if (byteBuffer.size() != 0) {
doWrite(args);
byteBuffer.reset();
}

二.写入的重试

写入第三方介质时由于网络传输问题,可能出现数据丢失等问题,需要重传

基本的逻辑是只要捕捉到异常将isException置为True就进行重传,直到传输成功,将isException置为False

//是否需要重传的标记,我这里时捕捉到了异常,也可能来自其它的response
boolean isException=false;
try {
writeData(args);
} catch (Exception e) {
log.error(e);
isException=true;
}
while (isException) {
try {
writeData(args);
isException=false;
log.info("retry->success");
} catch (Exception e) {
log.error("retry->failed",e);
isException=true;
}
}

最新文章

  1. JQuery Sizzle引擎源代码分析
  2. PHP memory_get_usage()管理内存
  3. C# 泛型的协变和逆变
  4. [问题2014A02] 解答二(求和法+拆分法,由张诚纯同学提供)
  5. nginx 配置多个二级域名
  6. 剑指offer系列43---判断平衡二叉树
  7. Java中public,private,final,static等概念的解读
  8. [Android学习笔记]RelativeLayout的使用
  9. Java实现非递归删除目录
  10. Python操作excel表格
  11. Python网络爬虫笔记(五):下载、分析京东P20销售数据
  12. [区块链] 密码学——椭圆曲线密码算法(ECC)
  13. c/c++语言开发工具Dev-cpp【推荐】
  14. Unity2018 Open C# Project Error
  15. 三.SQL语句
  16. [CF1039D]You Are Given a Tree
  17. Python实现简单的udp打洞(P2P)
  18. java运行原理剖析
  19. Spring 属性注入(二)BeanWrapper 结构
  20. Heapify

热门文章

  1. pycharm2017.3.3永久激活(转载)
  2. 使用flex布局解决百分比高度元素垂直居中
  3. Caused by: java.lang.UnsatisfiedLinkError: Couldn't load 。。。。
  4. Tomcat项目自动部署脚本
  5. 内置函数 lambda sorted filter map 递归
  6. 7.Netty中 handler 的执行顺序
  7. springboot中使用filter用配置类方式
  8. 1.opencv_画图
  9. 从零开始学会GAN 0:第一部分 介绍生成式深度学习(连载中)
  10. 异步消息处理机制相关面试问题-intentservice面试问题详解