打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java如何使用多线程读取40M的文件?最好有实例
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();
   }
  }
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java一次性查询几十万,几百万数据解决办法
实现自己的数据库一
Socket传输大文件(发送与接收)
Android视频编辑器(五)音频编解码、从视频中分离音频、音频混音、音频音量调节等
用Java简单实现文件分割与合并
文件句柄操作,可读socke后将文件放在本地处理后输出
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服