在开发的过程中要处理Excel文件,将其文档的内容按照一定的形式封住加密之后写入到Kafka中,但是Kafka那边一次性不能消费大量的数据,所以要将数据分批次写入。这里是用一个List来作为中间载体,每次取出一定量的数据写入Kafka中,并且写入之后进行短时间的休眠,防止数据堆积过多。
优化代码:
// 装填100条数据
for (int i = 0; i < list.size(); i += 100) {
if (i + 100 > list.size()) {
// 注意下标问题
toIndex = list.size() - i;
}
List newList = list.subList(i, i + toIndex);
sendList = newList;
// 将数据写入到Kafka中
writeToKafka(kafkaProducer, topic, sendList);
}
这里要注意的一个问题是,下标处理的问题。之前我在测试的过程中报了一个数组下标越界的错误,然后调试的过程中发现toIndex的值最后取的有问题,原来是在判断最后余数条的时候出现了逻辑问题,直接将list.size()-1当成了toIndex的值 之后将其进行了修改
未优化前代码:
// 装填200条数据
for (int i = 0; i < list.size(); i += 200) {
if (i + 200 > list.size()) {
// 注意下标问题
toIndex = list.size() - 1;
List newList = list.subList(i, i + toIndex);
sendList = newList;
break;
}
List newList = list.subList(i, i + toIndex);
sendList = newList;
writeToKafka(kafkaProducer, topic, sendList);
}
发现这个版本有点冗余,感觉有点重复了,于是进行了优化处理。在碰到问题的时候要多进行思考,这样才能够迎难而上… Fighting!!!