当前位置:首页 > 操作系统 > MacOs

java中利用RandomAccessFile读取超大文件

public class ReadBigFile { public static void readBigFile() throws IOException{ String fileName = "/Users/mc2/Desktop/youku.txt"; RandomAccessFile randomFile = null; randomFile = new RandomAccessFile(fileName, "r"); long fileLength = randomFile.length(); System.out.println("文件大小:" + fileLength); int start = 46000; randomFile.seek(start); byte[] bytes = new byte[91]; int byteread = 0; // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。 // 将一次读取的字节数赋给byteread while ((byteread = randomFile.read(bytes)) != -1) { // System.out.write(bytes, 0, byteread); } System.out.println(bytes.length); System.out.println(new String(bytes,"UTF-8")); if (randomFile != null) { randomFile.close(); } } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { ReadBigFile.readBigFile(); } }

即使很大的文件,从里面读取一点数据,速度也很快。全部读取出来,也会占用很少的内存。

核心提示: randomFile.seek(start);

跳跃读取,从这里开始读。指针直接指到start这个位置开始读取文件。

bytes获取可以作如下替换,不同场合,不同使用

<span style="color: #0000ff;">byte</span>[] bytes = <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">byte</span>[<span style="color: #800080;">91</span><span style="color: #000000;">];
        </span><span style="color: #0000ff;">int</span> byteread = <span style="color: #800080;">0</span><span style="color: #000000;">;
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 将一次读取的字节数赋给byteread</span>
        <span style="color: #0000ff;">while</span> ((byteread = randomFile.read(bytes)) != -<span style="color: #800080;">1</span><span style="color: #000000;">) {
           </span><span style="color: #008000;">//</span><span style="color: #008000;"> System.out.write(bytes, 0, byteread);</span>
<span style="color: #000000;">        }
        System.</span><span style="color: #0000ff;">out</span>.println(bytes.length);<span style="color: #0000ff;">byte</span><span style="color: #000000;">[] bytes ;
        </span><span style="color: #0000ff;">int</span> byteread = <span style="color: #800080;">0</span><span style="color: #000000;">;
 
        ByteArrayOutputStream byteout </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> ByteArrayOutputStream();
      </span><span style="color: #0000ff;">byte</span> tmp[] = <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">byte</span>[<span style="color: #800080;">1024</span><span style="color: #000000;">];
      </span><span style="color: #0000ff;">byte</span><span style="color: #000000;"> context[];
      </span><span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span><span style="color: #000000;">;
      </span><span style="color: #0000ff;">int</span> has=<span style="color: #800080;">0</span><span style="color: #000000;">;
      </span><span style="color: #0000ff;">while</span> ((i = randomFile.read(tmp)) != -<span style="color: #800080;">1</span><span style="color: #000000;">) {
     byteout.write(tmp, </span><span style="color: #800080;">0</span><span style="color: #000000;">, i);
     has </span>+=<span style="color: #000000;">i;
     </span><span style="color: #0000ff;">if</span>(has > <span style="color: #800080;">10240</span><span style="color: #000000;">)
       </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
     }
    bytes </span>= byteout.toByteArray();

 

java中利用RandomAccessFile读取超大文件

标签:

本文系统来源:http://www.cnblogs.com/zhujiabin/p/5660541.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐