分享

Java如何使用多线程读取40M的文件?最好有实例

 悟静 2014-04-22
java有个MappedByteBuffer类,他的作用可以把一个文件映射到内存中,然后就能像访问数组一样去读取这个文件。这样不用多线程也可以,你试试

public void readResource() {
  long fileLength = 0;
  final int BUFFER_SIZE = 0x300000;// 3M的缓冲
  
  for(String fileDirectory:this.readResourceDirectory())//得到文件存放路径,我这里使用了一个方法从XML文件中读出文件的
              //存放路径,当然也可以用绝对路径来代替这里的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的内容
    
    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内容给Scanner,这里的XXX是指Scanner解析的分隔符
       Scanner scan = new Scanner(new ByteArrayInputStream(dst)).useDelimiter("XXX");
       while(scan.hasNext())
       {
           //这里为对读取文本解析的方法
       }        
      scan.close();
     }
   } catch (Exception e)
   {
    e.printStackTrace();
   }
  }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多