zoukankan      html  css  js  c++  java
  • java读取 500M 以上文件,java读取大文件

    设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址

    package com.yjf.util;
    import java.io.File;
    import java.io.RandomAccessFile;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;

    public class Test {
    public static void main(String[] args) throws Exception {
    final int BUFFER_SIZE = 0x300000; // 缓冲区为3M
    File f = new File(Config.tempdatafile);
    int len = 0;
    Long start = System.currentTimeMillis();
    for (int z = 8; z >0; z--) {
    MappedByteBuffer inputBuffer = new RandomAccessFile(f, "r")
    .getChannel().map(FileChannel.MapMode.READ_ONLY,
    f.length() * (z-1) / 8, f.length() * 1 / 8);
    byte[] dst = new byte[BUFFER_SIZE];// 每次读出3M的内容
    for (int offset = 0; offset < inputBuffer.capacity(); offset += BUFFER_SIZE) {
    if (inputBuffer.capacity() - offset >= BUFFER_SIZE) {
    for (int i = 0; i < BUFFER_SIZE; i++)
    dst[i] = inputBuffer.get(offset + i);
    } else {
    for (int i = 0; i < inputBuffer.capacity() - offset; i++)
    dst[i] = inputBuffer.get(offset + i);
    }
    int length = (inputBuffer.capacity() % BUFFER_SIZE == 0) ? BUFFER_SIZE
    : inputBuffer.capacity() % BUFFER_SIZE;
    len += new String(dst, 0, length).length();
    System.out.println(new String(dst, 0, length).length()+"-"+(z-1)+"-"+(8-z+1));
    }
    }
    System.out.println(len);
    long end = System.currentTimeMillis();
    System.out.println("读取文件文件花费:" + (end - start) + "毫秒");
    }
    }

    来源博客http://yijianfengvip.blog.163.com/blog/static/175273432201191354043148/


  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/shanzei/p/2413514.html
Copyright © 2011-2022 走看看