建设网站平台需要什么硬件配置大数据营销软件
最近在做清洗数据的工作,使用BufferedWriter类用来追加文本内容,测试时候发现没有问题,拿到生成时候发现过大时丢失数据。
核心代码如下:
FileOutputStream fos = new FileOutputStream(saveFile, true);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter writer = new BufferedWriter(osw);
while (true){if (page % 10 == 0) {System.out.println(page + " 能被 500 整除。");saveFile = localTempPath + "dbSave" + page + ".sql";fos = new FileOutputStream(saveFile, true);osw = new OutputStreamWriter(fos, "UTF-8");writer = new BufferedWriter(osw);}String data = getShopownerSpecialDataStatisticsDbData(page).toString();if(!StringUtils.isBlank(data)){writer.write(data);writer.newLine();page++;}
}
精确定位之后打开文本内容如下:
发现解析的字符串内容丢失了一半,甚至不解,最终通过AI搜索 找到问题原因,原来是没进行flush()刷新缓存区,导致。解释如下:
BufferedWriter
内部有一个缓冲区,数据会先被写入到这个缓冲区,只有当缓冲区满了或者手动调用flush()
方法,或者关闭BufferedWriter
时,缓冲区中的数据才会被真正写入到目标文件或输出流中。如果在写入大量数据过程中没有及时刷新缓冲区,可能会导致部分数据还留在缓冲区而未被写入文件,从而造成数据丢失。
最终加上flush()方法解决了此问题,demo代码如下:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class BufferedWriterExample {public static void main(String[] args) {try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt", true))) {// 模拟大量数据for (int i = 0; i < 100000; i++) {writer.write("This is a test line " + i + "\n");// 每写入 1000 行数据就刷新一次缓冲区if (i % 1000 == 0) {writer.flush();}}} catch (IOException e) {e.printStackTrace();}}
}