现在本人正在开发一个游戏日志读取器,日志内容达到了上50个G,由于文件太大,本人会开条线程预读,将每页的字节保存在内存中,由于字节非常大,超过了int类型的最大值,所以本人用了long
读取信息时采用InputStreamReader 中的skip(int value)方法跳过,前面不需读的内容,到后面已经超过了int类型的值,所以跳不过2G+的文件.求读取该文件,又能让我陈功跳过某一页的解决方案 !
读取信息时采用InputStreamReader 中的skip(int value)方法跳过,前面不需读的内容,到后面已经超过了int类型的值,所以跳不过2G+的文件.求读取该文件,又能让我陈功跳过某一页的解决方案 !
解决方案 »
- 帮我编写一个程序将5 9 3 三个数,重新排列,得到一个最大三位数和一个最小三位数,并输出
- 请教一下高手,下面的程序是怎么了?调不好
- 请教:jscrollpane的竖向滚动条可以自动滚动,但是有时候滚动不到最下方?
- JavaBean中catch到的错误如何显示在页面上?
- 一个奇怪的问题
- JBuilder中的调试问题:Cannot start Java debug process VM
- 取两个HashSet的交集,retainAll方法是最速度最快的吗?
- 哪位大哥可以提供些gif或者png的图标给小弟?
- 执行 JAVAC 时出现问题,给个原因
- 一个很菜的问题,希望高手归于帮助
- java Swing 编程,请教!
- java连接access中文显示出错
用RandomAccessFile这个类吧,如果你要skip(int) 50G 可以把 50G换算成n个int 然后skip n次,这样应该行,我没测试,确实没见过这么大的日志!
预读取操作的话,倒是可以使用多线程,但是,还要维护缓存,比较麻烦。超大容量的日志文件,怎么做都会比较缓慢,你在对文件内容查询的过程,
其实,就相当于数据库的一个select过程。
与其这样,到不如全都导入到数据库表里面,使用select语句来查询,
其他的事情(比如分页多线程查询什么的),交由数据库来做。最后,10楼的方法,我觉得是可行的,还有,要注意skip跳过的是字节还是字符,呵呵。
两者是不同的,跳过字节,还会遇到字符解码的问题,可能会出现乱码。