- 文件監(jiān)聽
使用文件監(jiān)聽時需要注意,接受到文件創(chuàng)建事件時。當前文件寫入工作不一定完成。所以受關(guān)注的文件不應(yīng)當直接在受監(jiān)控的目錄下創(chuàng)建,而應(yīng)該創(chuàng)建臨時文件然后copy到受監(jiān)控的目錄 - Base64
將參數(shù)通過Base64編碼然后提交到服務(wù)器,“+” 號被替換為空格 - 慎用File#renameTo
File#renameTo不等同于mv,不能再不同文件系統(tǒng)間移動文件。例如:
//centos filesystem:xfs
Path tempFile = Files.createTempFile(null, null);
// write something to tempFile
// filesystem ext4
File dest = new File("/data/something.txt");
boolean suc = tempFile.toFile().renameTo(dest)
//會返回false,文件移動失敗
當遇到多文件系統(tǒng)的時候,請盡量避免使用File#renameTo(File)方法,可是使用apache的commons-io包去替換,避免一些潛在BUG。
- 注意Java8 多個 Stream 流同時執(zhí)行時,順序是不固定的
- Java8 Stream Collector.groupBy 默認采用HashMap收集結(jié)果,而HashMap是無序的。如果你對結(jié)果有順序要求,請顯示指定LinkedHashMap::new(可以記錄插入的順序)以確保集合順序被延續(xù)到新的結(jié)果集。
//思考這樣一段代碼
List<Integer> numList= Arrays.asList(1, 2, 2, 3, 3,3, 4,4,4,4)
Map<Integer, Integer> numCountMap = numList.stream().collect(Collector.groupBy(w ->w, Collector.counting()))
// 期望結(jié)果
numCountMap << [{1, 1}, {2, 2}, {3, 3}, {4,4}]
// 實際上順序是不能被保證的,你應(yīng)該采用下面的方法保證numList的順序被傳遞到numCountMap
Map<Integer, Integer> numCountMap = numList.stream().collect(Collector.groupBy(w ->w, LinkedHashMap::new, Collector.counting()))
- 如果新引入的特性不能在短時間內(nèi)驗證,應(yīng)該立即回歸主線。