Java中用内存映射处理大文件.docx_第1页
Java中用内存映射处理大文件.docx_第2页
Java中用内存映射处理大文件.docx_第3页
Java中用内存映射处理大文件.docx_第4页
Java中用内存映射处理大文件.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/art/201206/343690.htm在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。1. packagetest; 2. 3. importjava.io.BufferedInputStream; 4. importjava.io.FileInputStream; 5. importjava.io.FileNotFoundException; 6. importjava.io.IOException; 7. importjava.io.RandomAccessFile; 8. importjava.nio.MappedByteBuffer; 9. importjava.nio.channels.FileChannel; 10. 11. publicclassTest 12. 13. publicstaticvoidmain(Stringargs) 14. try 15. FileInputStreamfis=newFileInputStream(/home/tobacco/test/res.txt); 16. intsum=0; 17. intn; 18. longt1=System.currentTimeMillis(); 19. try 20. while(n=fis.read()=0) 21. sum+=n; 22. 23. catch(IOExceptione) 24. /TODOAuto-generatedcatchblock 25. e.printStackTrace(); 26. 27. longt=System.currentTimeMillis()-t1; 28. System.out.println(sum:+sum+time:+t); 29. catch(FileNotFoundExceptione) 30. /TODOAuto-generatedcatchblock 31. e.printStackTrace(); 32. 33. try 34. FileInputStreamfis=newFileInputStream(/home/tobacco/test/res.txt); 35. BufferedInputStreambis=newBufferedInputStream(fis); 36. intsum=0; 37. intn; 38. longt1=System.currentTimeMillis(); 39. try 40. while(n=bis.read()=0) 41. sum+=n; 42. 43. catch(IOExceptione) 44. /TODOAuto-generatedcatchblock 45. e.printStackTrace(); 46. 47. longt=System.currentTimeMillis()-t1; 48. System.out.println(sum:+sum+time:+t); 49. catch(FileNotFoundExceptione) 50. /TODOAuto-generatedcatchblock 51. e.printStackTrace(); 52. 53. MappedByteBufferbuffer=null; 54. try 55. buffer=newRandomAccessFile(/home/tobacco/test/res.txt,rw).getChannel().map(FileChannel.MapMode.READ_WRITE,0,1253244); 56. intsum=0; 57. intn; 58. longt1=System.currentTimeMillis(); 59. for(inti=0;i=0) 20. /sum+=n; 21. 22. catch(IOExceptione) 23. /TODOAuto-generatedcatchblock 24. e.printStackTrace(); 25. 26. longt=System.currentTimeMillis()-t1; 27. System.out.println(sum:+sum+time:+t); 28. catch(FileNotFoundExceptione) 29. /TODOAuto-generatedcatchblock 30. e.printStackTrace(); 31. 32. 33. try 34. FileInputStreamfis=newFileInputStream(/home/tobacco/test/res.txt); 35. BufferedInputStreambis=newBufferedInputStream(fis); 36. intsum=0; 37. intn; 38. longt1=System.currentTimeMillis(); 39. try 40. while(n=bis.read()=0) 41. /sum+=n; 42. 43. catch(IOExceptione) 44. /TODOAuto-generatedcatchblock 45. e.printStackTrace(); 46. 47. longt=System.currentTimeMillis()-t1; 48. System.out.println(sum:+sum+time:+t); 49. catch(FileNotFoundExceptione) 50. /TODOAuto-generatedcatchblock 51. e.printStackTrace(); 52. 53. 54. MappedByteBufferbuffer=null; 55. try 56. buffer=newRandomAccessFile(/home/tobacco/test/res.txt,rw).getChannel().map(FileChannel.MapMode.READ_WRITE,0,1253244); 57. intsum=0; 58. intn; 59. longt1=System.currentTimeMillis(); 60. for(inti=0;i1253244;i+) 61. /n=0x000000ff&buffer.get(i); 62. /sum+=n; 63. 64. longt=System.currentTimeMillis()-t1; 65. System.out.println(sum:+sum+time:+t); 66. catch(FileNotFoundExceptione) 67. /TODOAuto-generatedcatchblock 68. e.printStackTrace(); 69. catch(IOExceptione) 70. /TODOAuto-generatedcatchblock 71. e.printStackTrace(); 72. 73. 74. 75. 测试结果:1. sum:0time:1458 2. sum:0time:67 3. sum:0time:8由此可见,将文件部分或者全部映射到内存后进行读写,速度将提高很多。这是因

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论