是这样的, 面试的时候面试官问道:"现在有一个文件, 有2亿行, 我想要修改第一亿行的数据, 内存512, 该怎么做?"
  用java实现?
所以在这里问大家了, 呵呵, 请高手解答

解决方案 »

  1.   

    RandomAccessFileMappedByteBuffer不现实吧= =
      

  2.   

    两个MappedByteBuffer,RandomAccessFile都是可以的,就是MappedByteBuffer需要确定每次读取的长度。
      

  3.   

    我觉的问的很笼统:
    修改完后,数据长度是否和还原一样,没说 
    每行多少字节也没说...
    如果象int、long这类基础数据,算下位置直接跳到那改就是了。
      

  4.   

    用RandomAccessFile1) 跑到第1亿-1行,记录指针位置
    2) 从第1亿+1行开始,读入内存不超过某极限值(极限值肯定略小于512M,因为起码要留出JVM空间)
    3) 把剩下的文件尾部没有读入内存的数据用边读边写的方式写入一个临时文件
    4) 跑回步骤1)记录的指针位置,把修改后的第1亿行写入。
    5) 写入内存中缓存的数据
    6) 写入临时文件中的数据
    7) 修正结果文件长度(如果新行长度小于旧行,用setLength()修剪长度)这种做法把源文件分成了三部分,第一部分不占用内存也不产生磁盘IO操作,第2部分占用内存但尽量避免了多余的磁盘IO,第3部分不可避免地产生了1次磁盘读,2次磁盘写操作。