标签:file auto 时间 art buffer case lock col gen
转一篇:http://blog.csdn.net/fengxingzhe001/article/details/67640083
测试代码如下:
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")
}
}
这里解释一下一部分代码:
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的一些机制有关
标签:file auto 时间 art buffer case lock col gen
原文地址:http://www.cnblogs.com/LazyJoJo/p/7610791.html