在開發的過程中要處理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!!!