java对大文件进行存储和读取(测试数据4G)

该博客介绍了如何使用Java实现大文件的写入(10MB为块)和读取,包括`BufferedWriter`和`BufferedReader`的运用,以及两种不同方式读取文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 写文件
  public static void writeFile() throws IOException {
        File file = new File("D:\\Users\\lvxy\\Desktop\\CAT\\test.json");
        String str = "{\"catProjectId\":1,\"catFileId\":1,\"sourceContent\":\"[{\\\"color\\\":\\\"0\\\",\\\"subscript\\\":\\\"0\\\",\\\"underline\\\":\\\"0\\\",\\\"superscript\\\":\\\"0\\\",\\\"strike\\\":\\\"0\\\",\\\"bold\\\":\\\"0\\\",\\\"content\\\":\\\"批注哈哈哈\\\",\\\"dstrike\\\":\\\"0\\\",\\\"size\\\":\\\"0\\\",\\\"styleId\\\":\\\"\\\",\\\"background\\\":\\\"0\\\",\\\"isChangedStyle\\\":\\\"0\\\",\\\"incline\\\":\\\"0\\\",\\\"font\\\":{}}]\",\"documentFileNum\":\"4\",\"documentUnitNum\":\"2\",\"createTime\":1645437032219,\"documentSegmentNum\":\"1-0\"}";
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
        // 写入的缓冲区是5M
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream), 1024*1024 * 5);
        writer.write("[");
        writer.flush();
        // 大约是4000M的文件
        for (int i = 0; i < 10000000; i++) {
            writer.write(str);
            writer.write("\n");
            writer.flush();
        }
        writer.write("]");
        writer.flush();
        writer.close();
        outputStream.close();
    }


    public static void readFile() throws IOException {
        // 读文件
        File file = new File("D:\\Users\\lvxy\\Desktop\\CAT\\test.json");
        BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
        // 缓冲区 一次读5M
        BufferedReader reader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8), 1024 * 5 * 1024);// 用5M的缓冲读取文本文件

        String line = "";
        // 每次读取一行
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

    }

    public static void readFile2() throws IOException {
        // 读文件
        File file = new File("D:\\Users\\lvxy\\Desktop\\CAT\\test.json");
        BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
        // 缓冲区 一次读5M
        BufferedReader reader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8), 1024 * 5 * 1024);// 用5M的缓冲读取文本文件
        // 读取到的字节数 读到最后就是-1
        int line;
        // 指定每次读取多少字节
        char[] chars = new char[1024];
        while ((line = reader.read(chars)) != -1) {
            System.out.println(chars);
        }

    }
### JMeter Java堆内存不足解决方案 当JMeter运行时出现`java.lang.OutOfMemoryError: Java heap space`错误时,通常是因为分配给JVM的堆内存不足以支持当前负载测试的需求。以下是详细的解决方法: #### 调整JVM堆内存配置 可以通过调整JVM启动参数来增加可用的堆内存大小。具体操作如下: 对于Linux环境下的JMeter安装,需要编辑`bin/jmeter`脚本文件。打开该文件后,查找类似于以下的内容: ```bash HEAP="-Xms512m -Xmx512m" ``` 将其更改为适合的压力机硬件配置。例如,可以将堆内存的最大值最小值都设置为更大的数值,如4GB: ```bash HEAP="-Xms4g -Xmx4g" ``` 此更改确保了JVM有足够的初始堆空间以及最大堆空间[^5]。 #### 验证修改后的效果 保存并关闭文件后重新启动JMeter服务以应用新的配置。如果仍然遇到类似的错误,则可能需要进一步分析其他潜在原因,比如是否存在过多的数据存储在内存中未释放的情况。 另外,在某些情况下也可以考虑优化测试计划本身减少资源消耗;或者升级服务器硬件规格提供更强计算能力支持更大规模并发请求模拟场景需求[^1]。 #### 使用GC日志监控垃圾回收情况 为了更好地理解应用程序如何使用内存,并找出可能导致频繁Full GC的原因之一即长期存活对象占用大量老年代区域从而引发OOM异常现象发生概率增大等问题所在之处, 可以为 JVM 添加 Garbage Collection (GC) 日志选项以便于后续诊断分析工作开展顺利进行下去: ```bash -XX:+PrintGCDetails -Xloggc:/path/to/gc.log ``` 这样可以帮助识别是否有特定部分代码或数据结构导致不必要的高内存占用率问题存在其中一处地方而已并不是全部内容都需要如此处理才行哦! ```python # 示例Python代码用于展示如何读取GC日志文件(假设已启用上述命令行参数) with open('/path/to/gc.log', 'r') as f: gc_log_content = f.readlines() print(gc_log_content[:10]) # 打印前几条记录查看基本信息 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L-960

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值