2个回答
展开全部
解决这种问题,
简单说,设那个大文件为big.txt
写一个程序生成一个big.idx数据文件,记录big.txt每一行的结束位置+1,每个位置用long类型存储。
比如得到数据内容(非文本):
[10][22][34][84] ....[2345312].....[50000000]
扫描一遍,生成这500MB的长度文件,比如有10万行,这个big.idx文件就有800KB左右。
就根据big.idx可以查找指定行数了,比如查第1234行
已知一个long占8个字节,打开
第1234行的起始位置的存储位置p=(1234-2)*8=9856
第1234行的长度len的位置lp=(1234-1)*8=9864
寻道big.idx的p处,在p处读取一个long为pos
寻道big.idx的lp处,在p处读取一个long为npos
pos中就记录big.txt中第1234行的起始位置
该行长度len=npos-pos;
打开big.txt,查找pos位置,读len个字节,转换成字符串,
就读出了指定的1234行
把这个不大的big.idx的内容整理到内存中间,读取速度更快。
引经据典说,以上属于数据库基础的ISAM方法。
简单说,设那个大文件为big.txt
写一个程序生成一个big.idx数据文件,记录big.txt每一行的结束位置+1,每个位置用long类型存储。
比如得到数据内容(非文本):
[10][22][34][84] ....[2345312].....[50000000]
扫描一遍,生成这500MB的长度文件,比如有10万行,这个big.idx文件就有800KB左右。
就根据big.idx可以查找指定行数了,比如查第1234行
已知一个long占8个字节,打开
第1234行的起始位置的存储位置p=(1234-2)*8=9856
第1234行的长度len的位置lp=(1234-1)*8=9864
寻道big.idx的p处,在p处读取一个long为pos
寻道big.idx的lp处,在p处读取一个long为npos
pos中就记录big.txt中第1234行的起始位置
该行长度len=npos-pos;
打开big.txt,查找pos位置,读len个字节,转换成字符串,
就读出了指定的1234行
把这个不大的big.idx的内容整理到内存中间,读取速度更快。
引经据典说,以上属于数据库基础的ISAM方法。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询