可以使用分批读取数据的方式将数据分批加载到内存中,防止一次性加载过多数据导致内存溢出。具体实现可以使用Java的Stream API,将数据按照指定大小分割成多个子列表,然后分别处理每个子列表。

示例代码如下:

List<Data> dataList = new ArrayList<>();
int batchSize = 10000; // 指定批量读取的数据量
try (Stream<String> stream = Files.lines(Paths.get("data.txt"))) {
    List<String> lines = stream.collect(Collectors.toList());
    for (int i = 0; i < lines.size(); i += batchSize) {
        List<String> batchLines = lines.subList(i, Math.min(i + batchSize, lines.size()));
        List<Data> batchData = processData(batchLines); // 处理每个批次的数据
        dataList.addAll(batchData);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 处理每个批次的数据
private List<Data> processData(List<String> lines) {
    List<Data> dataList = new ArrayList<>();
    for (String line : lines) {
        // 解析每行数据,转换成Data对象
        Data data = parseData(line);
        dataList.add(data);
    }
    return dataList;
}

在上述代码中,我们将数据文件按行读取到一个字符串列表中,然后根据指定的批次大小,将数据分割成多个子列表,分别处理每个子列表中的数据,并将处理结果存储到总的数据列表中。这样可以有效地控制内存使用量,避免一次性加载过多数据导致内存溢出


原文地址: https://www.cveoy.top/t/topic/eGOP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录