大文件导入内存溢出?NIO+多线程帮你解决。

前言:上一篇文章讲到了文件下载,本文就讲述文件导入。对于文本文件的处理,大家肯定条件反射出IO流,而且第一个想到的是字符流。但是对于该这个需求来说,常用的IO流已经不能满足这个要求了,所有就有了NIO的学习。

常用的IO流。

下述为常用的IO流,使用这些API能够一些基本的IO操作。例如,文件拷贝、文件导出、文件读取等操作,但是这些都是最简单最基本的操作。在使用这些api的过程中,需要注意一些细节设置,建议在学习IO流操作的过程中将JVM堆内存调小,可以调至256M或128M,甚至更小,具体调成多少还需结合具体业务,主要是要注意是否一次性把文件加载到内存或者读取的数据量集合过大,避免线上发生内存溢出等问题。(直线谁都快,弯道快才是真的快!)

 	@Test
    public void test1() throws Exception {
        File file = new File("");
        //字节输入流
        InputStream fis = new FileInputStream(file);
        //字节输出流
        OutputStream fos = new FileOutputStream(file);
        
        //字符输入流
        Reader reader = new FileReader(file);
        //字符输出流
        Writer writer = new FileWriter(file);

        //字节缓冲流
        BufferedInputStream bis = new BufferedInputStream(fis);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        
        //字符缓冲流
        BufferedReader bufferedReader = new BufferedReader(reader);
        BufferedWriter bufferedWriter = new BufferedWriter(writer);
        
        //转换流 字节流转字符流
        InputStreamReader isr = new InputStreamReader(fis);
        OutputStreamWriter osw = new OutputStreamWriter(fos);
        
        //打印流
        PrintWriter printWriter = new PrintWriter(file);
        PrintStream printStream = new PrintStream(file);

        //了解 什么时候使用过
        InputStream in = System.in;
        PrintStream out = System.out;

    }

业务需求

现有一个超大文本文件(大小在10G左右,行数在4600w左右),要求将这一个大文本文件分割成多个小文本文件,每个小文本文件的行数为10w。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值