现在本人正在开发一个游戏日志读取器,日志内容达到了上50个G,由于文件太大,本人会开条线程预读,将每页的字节保存在内存中,由于字节非常大,超过了int类型的最大值,所以本人用了long
读取信息时采用InputStreamReader 中的skip(int value)方法跳过,前面不需读的内容,到后面已经超过了int类型的值,所以跳不过2G+的文件.求读取该文件,又能让我陈功跳过某一页的解决方案 !

解决方案 »

  1.   

    你还没理解多线程适合于什么地方!多线程适合于 CPU 密集型的计算,而非 IO 密集型计算IO 操作的并发率为 0,也就是说没办法进行并发,你用多线程读也是白费电!
      

  2.   

    定一个,刚吃了个火龙果,味道不错!
    用RandomAccessFile这个类吧,如果你要skip(int) 50G 可以把 50G换算成n个int 然后skip n次,这样应该行,我没测试,确实没见过这么大的日志!
      

  3.   

    可以考虑,逐条阅读日志信息,解析后,插入数据库当中,通过SQL语句进行查询。另外,既然是IO密集型操作,没必要使用多线程技术,
    预读取操作的话,倒是可以使用多线程,但是,还要维护缓存,比较麻烦。超大容量的日志文件,怎么做都会比较缓慢,你在对文件内容查询的过程,
    其实,就相当于数据库的一个select过程。
    与其这样,到不如全都导入到数据库表里面,使用select语句来查询,
    其他的事情(比如分页多线程查询什么的),交由数据库来做。最后,10楼的方法,我觉得是可行的,还有,要注意skip跳过的是字节还是字符,呵呵。
    两者是不同的,跳过字节,还会遇到字符解码的问题,可能会出现乱码。
      

  4.   

    火龙果说得对,你用skip是白费劲,每次用skip还是从文件的起始位置读入,读入到指定的位置后将前边读入的抛弃掉。你用skip只会事半功倍......用AccessFile的seek也许可以