现在有一个100万行的信息的文件,要进行抽奖。随机取出一定量的信息。问下各位怎样做最快最优呢?
先说我的做法:
1.通过bufferreader按行读取
2.存入一个stringbuffer中,结束后,再split(",")存入一个string数组a中。
3.通过a.length得出数据量总数(比如num=100万)。
4.进行ran.nextInt(num)取得中奖信息的下标,存入list中。
5.a[list.get(i)],得到抽奖结果。
这有个弊端,如果多人同时操作的话,服务器照样卡死。
这是我所能做的最大的优化了,不知各位还能否有更好的方法。
------解决方案--------------------
用RandomAccessFile,里面有seek方法,是偏移量,再读取的话,是从偏移位置开始读取。
如果每行数据长度一样的话,就好办了,直接偏移随机数*长度,然后读取一行数据。
如果每行数据长度不一样,就需要你程序控制了。
流的话,也有skip方法。
------解决方案--------------------
------解决方案--------------------
为什么要都读到内存中?
------解决方案--------------------
所谓的一行就是以'\r' '\n'(或者只是'\n')结尾的字节序,如果字符串类 不好处理,试试字节吧。
------解决方案--------------------
做个缓存把数据都缓存到一个map里面,所有用户都访问一个map比较好点,
如果每个用户访问都读文件,并发量大也吃不消
------解决方案--------------------
------解决方案--------------------