快速读取大文件的几种方式

转一篇:http://blog.csdn.net/fengxingzhe001/article/details/67640083

原来使用一行一行读取文本的方式,速度是慢的的可以,弄了好久还是不行,后来看了下才知道要用字节流传输会快很多

我自己也测了一下80M的文件,发现给读入块的大小会很明显的影响读入的速度。

测试代码如下:

def useBufferIStream(): Util = {
    try {
      val begin = System.currentTimeMillis
      val file = new File(s"E:\\data\\part-m-00000")
      val fis = new FileInputStream(file)
      val bis = new BufferedInputStream(fis)
      val buffer = new Array[Byte](1024*1024*90)
      var content = ""
      var cnt = 0
      cnt = bis.read(buffer)
      while( cnt != -1) {
        content += new String(buffer, 0, cnt)
        cnt=bis.read(buffer)
      }

      bis.close()
      println("=====BufferIStream===== time: " + (System.currentTimeMillis - begin) + "ms")

    } catch {
      case e: Exception =>
        // TODO Auto-generated catch block
        e.printStackTrace()
        println("error")
    }

  }

  代码中绿色部分为读入块的大小,目前设定的是90M大于要读的数据,这时的读入时间只要0.2s

  如果改为10M即(1024*1024*10),读入时间就需要10s左右,速度有很明显的变化。

  这里解释一下一部分代码:

  1、val buffer = new Array[Byte](1024*1024*90)  为每次读入文件的大小;

  2、cnt = bis.read(buffer) 读入数据块大小的标识,如果读入块没用信息则为-1,有信息则为这块信息的大小;

  3、content 为最终读入的文本信息

  4、这里使用的Scala语言,测试中发现

    cnt = bis.read(buffer)
      while( cnt != -1) {
        content += new String(buffer, 0, cnt)
        cnt=bis.read(buffer)
      }

  while的这块语句书写必须用这种形式,不能使用  while((cnt=fis.read(buffer)) != -1)  ,虽然在java上运行是都可以的,但是在Scala中,后者运行会报错,具体原因不明,应该跟Scala的一些机制有关

时间: 2024-08-29 10:54:44

快速读取大文件的几种方式的相关文章

PHP几个快速读取大文件例子

PHP几个快速读取大文件例子 感谢 把我给崩了 的投递 时间:2014-10-16 来源:三联 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采

PHP如何快速读取大文件

原文:PHP如何快速读取大文件 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容

java读取XML文件的四种方式

java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>A1234</NO> <ADDR>河南省郑州市</ADDR> </VALUE> <VALUE> <NO>B1234</NO> <ADDR>河南省郑州市二七区&

【转】PHP如何快速读取大文件

在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写

PHP读取大文件的几种方法

场景:PHP读取超大文件,例如1G的日志文件,我这里使用的是400M的access.log文件 1.使用file直接读取 <?php $starttime=microtime_float(); ini_set('memory_limit', '-1'); $file = 'testfile.txt'; $data = file($file); $line = $data[count($data) - 1000]; $endtime=microtime_float(); echo count($d

JavaWeb读取资源文件的四种方式

1. ServletContext 1. 调用getResourcesAsStream方法获取输入流, 相对于webroot, 不用加/2. 读取任何类型的文件3. *只能在web环境下使用 InputStream in = this.getServletContext().getResourceAsStream("WEB-INF/classes/config/db.properties"); 2. 类加载器 1. 相对于类路径, 可以获取类路径下及其子包路径下的资源文件2. 可以用在

selenium读取txt文件的几种方式

1.用java读取txt文件 public static String readFJ(String path) { path = "D:/workspace/hetong.txt"; File file = new File(path); StringBuffer txt= new StringBuffer(); if(file.isFile() && file.exists()) { //InputStreamReader in = null; try { Input

读取XML文件的几种方式的效率分析

第一种:使用XmlReader来读取. 1 Stopwatch sw = Stopwatch.StartNew(); 2 List<Dictionary<string, string>> entityInfo = new List<Dictionary<string, string>>(); 3 using (XmlReader reader = new XmlTextReader(compareXmlName)) 4 { 5 Dictionary<s

java读取excel文件的两种方式

方式一: 借用 package com.ij34.util; /** * @author Admin * @date 创建时间:2017年8月29日 下午2:07:59 * @version 1.0 *@type_name myclass */ import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.B