各位好,现在遇到一个大文件处理的问题,需要将大于4G的文件全部读入内存,然后对内存的数据进行检查校验,如果有不符合规则(校验规则比较简单)的数据,则该文件无效。 
请问,这应该怎么处理好?(生产环境是64位系统,64G内存小型机)

解决方案 »

  1.   

    分段读不就行了,分N段,分段<4G
      

  2.   

    你是用JAVA??
    要读4G文件...你的JVM得设多大啊....现实吗...做数据校验为什么要把整个文件载入??不明白...
      

  3.   

    如果有不符合规则(校验规则比较简单)的数据如果是一行一行的校验,直接用流操作应该没什么大问题,不用全读到内存。
    也就是readline一行,判断一行,不符合就处理下一个文件或者做别的事情。如果不是,也可以重复用readline把要检测的内容一部分一部分的读出来
    然后检测,总之就是不要都读进来,
    无论硬件如何,崩溃的几率还是蛮大的。good luck
      

  4.   

    大文件一般不全部读入,采用nio内存映像方式读取。
      

  5.   


    因为楼主是64位系统,64G内存小型机,困此可用64位的JVM,然后JVM内存参数如:16G内存。你就一次全
    读入内存进行计算就行了。
    有一种说法是:64位JVM比32位JVM性能下降,不知是在32的OS上64JVM下降,还是指64OS上的64位的JVM性能下降,不大清楚。
      

  6.   


    import java.io.File;
    import java.io.RandomAccessFile;
    import java.nio.channels.FileChannel;
    import java.nio.MappedByteBuffer;
    import static java.nio.channels.FileChannel.MapMode.READ_WRITE;public class MemoryMappedFile{
    public static void main(String[] args)throws Exception{
    File file = new File("FourGFile.bin");
    RandomAccessFile raf = new RandomAccessFile(file,"rwd");
    FileChannel channel = raf.getChannel();
    MappedByteBuffer mbb = channel.map(READ_WRITE,0,channel.size()).load();
    //现在可以对mbb进行相关的读写操作 channel.close();
    raf.close();
    }
    }
      

  7.   

    无语了!!硬件再好,软件也会崩溃啊!!读取4G的文件!!!!
    为什么不弄个更大的呢?我来帮你问吧。要一次性读取16G的文件进内存怎么处理?
    各个GGMM帮帮他吧。。
      

  8.   

    在简单不过了,用 byte[] 保存文件数据即可。
      

  9.   

    太感谢你遇上这问题,顺便问一下64位JDK能在 AS400机器上稳定部署么?如果你在小型机上运行别的系统就别回复了,那就没意义了。
    使用
    java.nio ->ByteBuffer还有如下代码供你参考,顺便你测试一下在小型机上能不能行的通。你把数据改为4G试试。这个类源于apache的开源工具。        DiskFileItemFactory factory = new DiskFileItemFactory();
    //超越4KB就往磁盘里面写数据,小于这个值就存入内存
    factory.setSizeThreshold(4096);
    //设置磁盘路径
    String filePath=servletContext.getRealPath("/temp/");
    factory.setRepository(new File(filePath));
      

  10.   

    双学习一个新知识点,谢谢!!!
    http://hi.baidu.com/kaka888/blog/item/26f59a3dacbb8701baa167fe.html
      

  11.   

    使用64位的JVM即可读取4GB+的文件到内存,上限是多少不清楚,但是应该会大于64GB
      

  12.   

    用nio的内存隐射文件吧 真没必要一次全读到内存中去
      

  13.   

    个人认为你根本就不应该考虑怎么样把4G的文件读入内存进行校验,而应该从性能和实际情况来考虑用别的方法来进行校验。比如之前有人说的分段校验,或者文件的MD5码校验。