考虑性能的修改文件 是这样的, 面试的时候面试官问道:"现在有一个文件, 有2亿行, 我想要修改第一亿行的数据, 内存512, 该怎么做?" 用java实现?所以在这里问大家了, 呵呵, 请高手解答 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 RandomAccessFileMappedByteBuffer不现实吧= = 两个MappedByteBuffer,RandomAccessFile都是可以的,就是MappedByteBuffer需要确定每次读取的长度。 我觉的问的很笼统:修改完后,数据长度是否和还原一样,没说 每行多少字节也没说...如果象int、long这类基础数据,算下位置直接跳到那改就是了。 用RandomAccessFile1) 跑到第1亿-1行,记录指针位置2) 从第1亿+1行开始,读入内存不超过某极限值(极限值肯定略小于512M,因为起码要留出JVM空间)3) 把剩下的文件尾部没有读入内存的数据用边读边写的方式写入一个临时文件4) 跑回步骤1)记录的指针位置,把修改后的第1亿行写入。5) 写入内存中缓存的数据6) 写入临时文件中的数据7) 修正结果文件长度(如果新行长度小于旧行,用setLength()修剪长度)这种做法把源文件分成了三部分,第一部分不占用内存也不产生磁盘IO操作,第2部分占用内存但尽量避免了多余的磁盘IO,第3部分不可避免地产生了1次磁盘读,2次磁盘写操作。 求教 二叉树! 转换背景图片不能及时显示 串口能写不能读,读取不完整,IO JAVA 中如何判断当前浏览器的语言 请问在98系统下如何配置JDK ? JAVA图形问题。。。。 求高手点拨一个“Socket通信”的运行异常. 请问在JAVA中如何调用外部程序并输入信息实现某些功能??? 谁能大概告诉我一下Vector()这个类是怎么回事?该怎样使用比较合适? 网上很多人转载的使用的java命令并不是 jdk/bin目录下的而是jre/bin目录下的 求一个正则表达式,去掉"["和"]" 这样的异常如何捕获??
修改完后,数据长度是否和还原一样,没说
每行多少字节也没说...
如果象int、long这类基础数据,算下位置直接跳到那改就是了。
2) 从第1亿+1行开始,读入内存不超过某极限值(极限值肯定略小于512M,因为起码要留出JVM空间)
3) 把剩下的文件尾部没有读入内存的数据用边读边写的方式写入一个临时文件
4) 跑回步骤1)记录的指针位置,把修改后的第1亿行写入。
5) 写入内存中缓存的数据
6) 写入临时文件中的数据
7) 修正结果文件长度(如果新行长度小于旧行,用setLength()修剪长度)这种做法把源文件分成了三部分,第一部分不占用内存也不产生磁盘IO操作,第2部分占用内存但尽量避免了多余的磁盘IO,第3部分不可避免地产生了1次磁盘读,2次磁盘写操作。