背景:
由于项目需求需要模拟一万个<k,v>组成的字符串,并写入到文件以备后续使用
以下是bug的代码
private void writerDataFile(String carReqDataPath, String originFileName, String reqCardCar) throws IOException {
FileWriter fileWriter = new FileWriter(carReqDataPath + originFileName);
BufferedWriter bw = new BufferedWriter(fileWriter);
bw.write(reqCardCar);
//bw.flush();
//bw.close();
fileWriter.close();
}
后果是原本的json字符串大小250kb左右,如果不刷新的话大概能进去245.7kb,也就是说在流关闭前时候一部分数据在内存中未被刷到硬盘,
上图为BufferedWriter的writer的函数,可以看到每次最多读区nChars=8192个字符(在构造函数中默认指定的可以设置),由上图我再最后一次循环处停止可知只剩4268个字符刷盘条件不成立,而且上述代码再没刷盘的情况下就关闭了,所以最终导致文件中缺少末尾处的字符。