java有個(gè)MappedByteBuffer類,他的作用可以把一個(gè)文件映射到內(nèi)存中,然后就能像訪問數(shù)組一樣去讀取這個(gè)文件。這樣不用多線程也可以,你試試
public void readResource() {
long fileLength = 0;
final int BUFFER_SIZE = 0x300000;// 3M的緩沖
for(String fileDirectory:this.readResourceDirectory())//得到文件存放路徑,我這里使用了一個(gè)方法從XML文件中讀出文件的
//存放路徑,當(dāng)然也可以用絕對(duì)路徑來(lái)代替這里的fileDriectory
{
File file = new File(fileDirectory);
fileLength = file.length();
try {
MappedByteBuffer inputBuffer =
new RandomAccessFile(file,"r").getChannel().map(FileChannel.MapMode.READ_ONLY, 0, fileLength);//讀取大文件
byte[] dst = new byte[BUFFER_SIZE];//每次讀出3M的內(nèi)容
for(int offset=0; offset < fileLength; offset+= BUFFER_SIZE)
{
if(fileLength - offset >= BUFFER_SIZE)
{
for(int i = 0;i < BUFFER_SIZE;i++)
dst = inputBuffer.get(offset + i);
}
else
{
for(int i = 0;i < fileLength - offset;i++)
dst = inputBuffer.get(offset + i);
}
//將得到的3M內(nèi)容給Scanner,這里的XXX是指Scanner解析的分隔符
Scanner scan = new Scanner(new ByteArrayInputStream(dst)).useDelimiter("XXX");
while(scan.hasNext())
{
//這里為對(duì)讀取文本解析的方法
}
scan.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。