摘要: java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer。 MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高。NIO最主要的就是实现了 阅读全文
posted @ 2016-05-27 21:41 有梦就能实现 阅读(4640) 评论(0) 推荐(0) 编辑
摘要: 1. 在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取 到用户空间的缓冲区。参看read(byte b[])方法的源码,可知,它会在内部再调用readBytes(b, 0, 阅读全文
posted @ 2016-05-27 21:30 有梦就能实现 阅读(719) 评论(0) 推荐(0) 编辑
摘要: 1、概述 本教程将演示如何用Java高效地读取大文件。这篇文章是Baeldung(http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分。 2、在内存中读取 读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快 阅读全文
posted @ 2016-05-27 21:16 有梦就能实现 阅读(2042) 评论(0) 推荐(0) 编辑
摘要: NIO入门之轻松读取大文件 今天同事碰到了一个问题,从游戏服务器下载下来的输出log有一个多G大。用记事本打不开,EditPlus也打不开,都提示文件太大。用word也打不开,提示文件大于512M。打不开怎么查找错误啊。于是他问我解决办法。我想了想,决定写一个简单的程序读取这个log,把这个log切 阅读全文
posted @ 2016-05-27 21:13 有梦就能实现 阅读(6167) 评论(0) 推荐(0) 编辑
摘要: Java NIO的出现旨在提高文件的读写速度,当然IO用NIO重新实过,所以我们不用显示的调用NIO也能享受这种高效的文件读写。 Java NIO的高效得益于其两大"助手":Channel(管道)和Buffer(缓冲器)。当然这两个"得力助手"的"年龄"远远比java大!力求简单易懂的把知识讲解给大 阅读全文
posted @ 2016-05-27 21:08 有梦就能实现 阅读(524) 评论(0) 推荐(0) 编辑
摘要: java 读取一个巨大的文本文件既能保证内存不溢出又能保证性能 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.RandomAccessFile; import 阅读全文
posted @ 2016-05-27 21:05 有梦就能实现 阅读(22204) 评论(0) 推荐(0) 编辑
摘要: package com.yao.bigfile; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import ja 阅读全文
posted @ 2016-05-27 21:02 有梦就能实现 阅读(1570) 评论(0) 推荐(0) 编辑
摘要: 做项目过程中遇到要解析100多M的TXT文件,并入库。用之前的FileInputStream、BufferedReader显然不行了,虽然readLine这方法可以直接按行读取,但是去读一个140M左右,68W条数据的文件时,不但耗时长而且会内存溢出,即你等不到读完68W条数据时就内存溢出了。所以得 阅读全文
posted @ 2016-05-27 21:00 有梦就能实现 阅读(12671) 评论(4) 推荐(0) 编辑
摘要: java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;import java.nio.ch 阅读全文
posted @ 2016-05-27 20:56 有梦就能实现 阅读(1307) 评论(0) 推荐(0) 编辑
摘要: 如下的程序,将一个行数为fileLines的文本文件平均分为splitNum个小文本文件,其中换行符'r'是linux上的,windows的java换行符是'\r\n': 以上程序处理大文本文件只需要30MB左右的内存空间(这和所设的读取缓冲大小有关),但是速度不是很快,在磁盘没有其他程序占用的情况 阅读全文
posted @ 2016-05-27 20:53 有梦就能实现 阅读(841) 评论(0) 推荐(0) 编辑
摘要: 使用备忘录模式(Memoization Pattern)提高性能 这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了。因此,底层只需要使用一个Map就够了。 但是需要注意的是,只有一组参数对应得到的是同一个值时,该模式才有用武之地。 在很多算法中,典型的比如分治 阅读全文
posted @ 2016-05-27 12:39 有梦就能实现 阅读(781) 评论(0) 推荐(0) 编辑
摘要: 递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时,还 阅读全文
posted @ 2016-05-27 12:38 有梦就能实现 阅读(3156) 评论(0) 推荐(1) 编辑
摘要: 在java语言中,使用递归调用时,如果过多的调用容易造成java.lang.StackOverflowError即栈溢出和程序执行过慢。这是一个潜在Bug和影响程序执行效率问题,需要谨慎使用。 下面先看造成java.lang.StackOverflowError即栈溢出问题: public clas 阅读全文
posted @ 2016-05-27 12:37 有梦就能实现 阅读(1919) 评论(0) 推荐(0) 编辑
摘要: 递归是程序设计中很重要的技巧,简单易于实现;但递归程序效率较之非递归低得多,递归函数要直接或间接的调用自身,系统栈要频繁操作,时间空间消耗很大。在要求高效的很多场合需要将递归程序改写成非递归程序,由于疏于梳理这方面的知识点,感觉对于有些递归结构有些力不从心,于是有意识的学习了一下,感觉好了很多。 关 阅读全文
posted @ 2016-05-27 12:35 有梦就能实现 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 如何用栈实现递归与非递归的转换 一.为什么要学习递归与非递归的转换的实现方法? 1)并不是每一门语言都支持递归的. 2)有助于理解递归的本质. 3)有助于理解栈,树等数据结构. 二.递归与非递归转换的原理. 递归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来.需要说明的是, 这个 阅读全文
posted @ 2016-05-27 12:34 有梦就能实现 阅读(2321) 评论(0) 推荐(0) 编辑
摘要: 摘要:我们经常会用到递归函数,但是如果递归深度太大时,往往导致栈溢出。而递归深度往往不太容易把握,所以比较安全一点的做法就是:用循环代替递归。文章最后的原文里面讲了如何用10步实现这个过程,相当精彩。本文翻译了这篇文章,并加了自己的一点注释和理解。 目录 1. 简介2.模拟函数的目的3.递归和模拟函 阅读全文
posted @ 2016-05-27 12:32 有梦就能实现 阅读(705) 评论(0) 推荐(0) 编辑