码迷,mamicode.com
首页 > 移动开发 > 详细

内存映射文件方式(MappedByteBuffer)处理文件的实例

时间:2015-10-29 16:39:59      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

package org.phoenix.cases.kafka;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;
import org.junit.Test;
/**
 * 内存映射文件方式处理文件的实例
 * @author mengfeiyang
 *
 */
public class MappedBytes {
 String filePath = "E:\\工作目录\\新项目\\凤舞一期\\backup\\new_show_style_json.txt";
 
 
 /**
  * 内存映射文件方式处理文件的实例
  * @throws FileNotFoundException
  * @throws IOException
  */
 @SuppressWarnings("resource")
 @Test
 public void testMappedByte() throws FileNotFoundException, IOException {
  long start = System.currentTimeMillis();
  File file = new File(filePath);
  long fileLength = file.length();
  final int BUFFER_SIZE=0x500000;//5M
  MappedByteBuffer inputBuffer = new RandomAccessFile(file,"rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 0, fileLength);
  byte[] dst = new byte[BUFFER_SIZE];
  int count=0;
  for(int offset=0;offset<fileLength;offset += BUFFER_SIZE){
            if (fileLength - offset >= BUFFER_SIZE) {    
                for (int i = 0; i < BUFFER_SIZE; i++)    
                    dst[i] = inputBuffer.get(offset + i);    
            } else {    
                for (int i = 0; i < fileLength - offset; i++)    
                    dst[i] = inputBuffer.get(offset + i);    
            }    
            String bs = new String(dst,"UTF-8");//将buffer中的字节转成字符串
            String[] ns = bs.split("\n");
            for(String s : ns){
             if(s.contains("-1-")){
              count++;
              System.out.println(s.split("-1-")[0]);
             }
            }
           
            System.out.println();
            //String s = IOUtils.toString(new ByteArrayInputStream(dst));
            //System.out.println(s);
  }
  System.out.println("总处理条数:"+count);
  long end = System.currentTimeMillis();
 
  System.out.println((end - start)/1000);//处理809M的文件,90000条数据,只用了6秒
 }
 
 }
}


内存映射文件方式(MappedByteBuffer)处理文件的实例

标签:

原文地址:http://my.oschina.net/u/2391658/blog/523524

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!