- 浏览: 2079812 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (366)
- hadoop (91)
- DB (2)
- vmware (0)
- python (49)
- Java (72)
- Linux (57)
- 多线程 (2)
- hive (1)
- hbase (3)
- mongodb (5)
- Hibernate (3)
- nodejs (1)
- 模式与重构 (1)
- 持续集成CI (4)
- Mysql (2)
- chorme (1)
- 软件开发 (0)
- 敏捷 (5)
- maven (3)
- windows (7)
- 测试驱动 (1)
- scala (3)
- Jetty (0)
- android (1)
- eclipse (1)
- 设计模式 (1)
- 面向对象设计 (2)
- oracle (3)
- cassandra (15)
- pig (3)
- rails (1)
- redis (4)
- ruby (1)
- storm (0)
- 实时运算 (3)
- scribe (1)
- hadoop源码 (3)
- cassandra jna (1)
- Kafka (2)
- Sublime (2)
- C++ (2)
- C (1)
- 版本控制 (1)
- 服务器 (1)
- docker (0)
- flink (1)
最新评论
-
伍大都督:
解释太到位了,感谢分享
理解Linux系统中的load average(图文版) -
rfjian123:
非常感谢,用你的方法解决了问题。
Server sent unexpected return value (403 Forbidden) in response to OPTIONS -
yuhaifei12:
今天遇到同样的问题了。设置的是每分钟执行一次。结果发现每分钟执 ...
解决Linux下crontab同一时间重复执行问题 -
BigBird2012:
想问一下,使用ExecutorService每次都要调用 sh ...
spring quartz使用多线程并发“陷阱” -
zhuqx1130:
有用,谢谢
解决Sublime Text 3中文显示乱码(tab中文方块)问题
下面代码使用两种方式读取日志文件,一种是流方式,一种是内存映射:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.nio.CharBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.util.Scanner; import java.util.zip.GZIPInputStream; public class Test { static String path = "D:\\log\\proclog\\loganalysis\\0108161331_CHN-MY-1_1021235501.log"; public static void main(String[] s) throws IOException { stream(); mem(); } public static void stream() throws FileNotFoundException, IOException { Long startTime = System.currentTimeMillis(); BufferedReader reader = getReader(new File(path)); String line; while ((line = reader.readLine()) != null) { // 空转 } Long estimatedTime = System.currentTimeMillis() - startTime; System.out.printf("stream Diff: %d ms\n", estimatedTime); } public static BufferedReader getReader(File f) throws FileNotFoundException, IOException { BufferedReader reader = null; if (f.getName().endsWith(".gz")) { reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(f)))); } else { reader = new BufferedReader(new InputStreamReader(new FileInputStream(f))); } return reader; } public static void mem() throws IOException { Long startTime = System.currentTimeMillis(); FileChannel fc = new FileInputStream(path).getChannel(); MappedByteBuffer byteBuffer = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); //Charset charset = Charset.forName("US-ASCII"); Charset charset = Charset.forName("iso-8859-1"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer charBuffer = decoder.decode(byteBuffer); Scanner sc = new Scanner(charBuffer).useDelimiter(System.getProperty("line.separator")); while (sc.hasNext()) { sc.next(); } fc.close(); Long estimatedTime = System.currentTimeMillis() - startTime; System.out.printf("mem Diff: %d ms", estimatedTime); } }
输出:
stream Diff: 147 ms
mem Diff: 2470 ms
mem Diff: 2470 ms
从输出来看流方式要远远快于内存映射读取,看来逐行读取文本还是继续使用steam api吧。
PS. 测试文件大小23MB,使用一个100MB的文件,mem方式报内存溢出,有点尴尬,先做个记号吧。
参考:
http://hi.baidu.com/limin040206/blog/item/92763dfcd301ff0008244d48.html
http://jiangzhengjun.iteye.com/blog/515745
http://stackoverflow.com/questions/1045632/bufferedreader-for-large-bytebuffer
-- end --
评论
7 楼
cyb_rc
2013-11-18
PS. 测试文件大小23MB,使用一个100MB的文件,mem方式报内存溢出,有点尴尬,先做个记号吧。
至于这个,mem默认大小是跟堆的大小一样,可以自己设置mem大小
至于这个,mem默认大小是跟堆的大小一样,可以自己设置mem大小
6 楼
cyb_rc
2013-11-18
至于这个
PS. 测试文件大小23MB,使用一个100MB的文件,mem方式报内存溢出,有点尴尬,先做个记号吧。
PS. 测试文件大小23MB,使用一个100MB的文件,mem方式报内存溢出,有点尴尬,先做个记号吧。
5 楼
cyb_rc
2013-11-18
映射方式 输出的地方时间消耗太大
映射文件 速度比流快很多,文件越大越明显
映射文件 速度比流快很多,文件越大越明显
4 楼
test_lockxxx
2012-02-08
我估计卡在这里:
Scanner sc = new Scanner(charBuffer).useDelimiter(System.getProperty("line.separator"));
Scanner sc = new Scanner(charBuffer).useDelimiter(System.getProperty("line.separator"));
3 楼
test_lockxxx
2012-02-08
拿 BufferedReader 与 MappedByteBuffer 相比,这本身就不公平。
至少也应该拿 BufferedInputStream 与 MappedByteBuffer 相比。
至少也应该拿 BufferedInputStream 与 MappedByteBuffer 相比。
2 楼
heipark
2011-10-18
lindakun 写道
请问楼主,逐行读取有没有更快的方法呢?
到目前为止除了BufferedReader,我不知道用其它了,这块sun/oracle已经做过优化,踏实用吧,如果还有问题,或许要转变解决问题的思路。
1 楼
lindakun
2011-09-29
请问楼主,逐行读取有没有更快的方法呢?
发表评论
-
shell下使用log4j 1.x “No appenders could be found for logger”问题两个处理办法
2018-05-25 23:25 1571错误: log4j:WARN No appenders c ... -
通过java class文件确定其编译器版本
2016-06-23 10:45 1031方法一: hexdump -C XXX.class ... -
字符编码笔记:ASCII,Unicode和UTF-8(转)
2014-11-06 17:29 1201今天中午,我突然想搞 ... -
Server sent unexpected return value (403 Forbidden) in response to OPTIONS
2014-10-10 15:01 5502之前用的好好的,忽然某天再次svn up时候就报下面的错误: ... -
netbeans下优秀sublinme主题
2014-09-29 10:13 3581推荐站点:http://netbeansthemes.com ... -
将netbeans项目放到jenkins上做持续集成
2014-07-25 15:20 1196netbeans项目本质是通过ANT来管理的,只不 ... -
关于jvm中Xmx参数默认值
2014-05-08 09:19 1966我的机器win7 64bit 8GB内存,通过jconso ... -
Eclipse代码自动完成功能无法使用问题记录
2014-04-28 10:15 1093使用Alt+/无法补齐Java代码,现象时没有反应。解决方 ... -
thrift0.9.1简单教程(包含Java服务端和Java、python客户端)
2014-04-25 15:55 6356一、Thrift Java服务端和客户端 官 ... -
使用sublime text3开发scala
2014-04-04 16:49 3712打开菜单栏Tool->build system-> ... -
netbeans下打开本地文件夹插件(explorer)
2014-04-02 14:44 19871. 在线安装 工具->插件->可用插 ... -
关闭Sublime自动更新
2014-03-09 21:42 764每次启动都提示更新,可以关闭它。 找到Prefere ... -
使用log4j.properties配置slf4j输出LOG
2014-01-09 08:57 6595完成配置需要以下文件: slf4j-log4j12-x ... -
正确使用java -cp通配符
2013-11-21 17:05 10111JDK6支持java -cp后面跟通配符'*',试了一下发 ... -
强制Java使用东八时区方法
2013-11-15 15:37 1801今天线上有台服务器时区错误,导致很多使用new Da ... -
谨慎使用java的PrintWriter类
2013-10-23 12:31 1329public void test() throws Fil ... -
记录Java ShutdownHook
2013-08-30 11:40 1042public class TestMe { stat ... -
eclipse + maven + jetty + spring web 开发环境简要笔记
2013-08-27 11:25 1566环境准备 确保安装maven3 确保安装eclip ... -
Eclipse(IDE for Java Developers)、maven、jetty、spring web集成
2013-08-27 08:53 0方法一: http://wiki.eclipse.o ... -
关于数据压缩
2013-08-23 14:26 1099常用压缩 quicklz zlib snappy/ ...
相关推荐
Java字节流数据逐行读取(readLine)
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 ...
本类,是专门为了处理大文件,按行读取开发的类。 采用读文件的缓存 fbb 1024*5 行缓存 bb 256 字节 设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件...
1. 从文本文件(TXT, INI等)中读取指定行的内容 2. 代码实测OK
通过Java读取指定行列的数据,请用eclipse平台打开。实现思想详见我的博客。
python中readline判断文件读取结束的方法
介绍了Java 的 FileFilter文件过滤与readline读行操作实例代码,有需要的朋友可以参考一下
建立一个文件的内存映射将使用操作系统虚拟内存来直接访问文件系统上的数据,而不是使用常规的I/O函数访问数据。内存映射通常可以提供I/O性能,因为使用内存映射是,不需要对每个访问都建立一个单独的系统调用,也不...
23-readline (逐行读取).pdf
一行一行得从文件读数据,显然比较慢; 不过很省内存; 测试读10M的sample.txt文件,每秒大约读32000行; 2:fileinput import fileinput for line in fileinput.input("sample.txt"): pass 写法简单一些,不过...
= null) {//使用readLine方法,一次读一行 wordList.add(s.trim()); } } catch (Exception e) { Logger.getLogger(FileUtil.class).info(e); return Collections.emptyList(); } finally { try { if (br !=...
* 功能:Java读取txt文件的内容 * 步骤:1:先获得文件句柄 * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取 * 3:读取到输入流后,需要读取生成字节流 * 4:一行一行的输出。readline...
line = sr.ReadLine Me.ToolStripStatusLabel2.Text = line line = sr.ReadLine Me.ToolStripStatusLabel4.Text = line line = sr.ReadLine Me.ToolStripStatusLabel2.ToolTipText = line line = sr.ReadLine...
3个方法去读取一个大于50M的文件,当不设置jvm参数时都OutofMemery,当设置-Xmx128M时。只有方法3 可以通过,设置到-Xmx256M时也只有方法3可以通过,干脆设置512M,都可以了,运行时间如果正常的话一般都在4~5S
使用BufferedInputStream字节流,以及StringBuiler技术实现字节的逐行读取。即字节流的readline功能。BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(file));
用法: % 读取第一行(默认) s = readline('data.txt'); % 读取第 8 行s = readline('data.txt',8); % 读取 [1 2 4 8] 行s = readline('data.txt',[1 2 4 8]); % 读取最后 7 行s = readline('data.txt',[-7; -1]); ...
java中br.readLine与br.read的区别.doc
Readline utils用于移动光标,清除行,创建readline界面等等
大家知道,python中按行读取文件可以使用readline函数,下面现介绍一个按行遍历读取文件的方法,通过这个方法,展开我们要讨论的问题: 复制代码 代码如下:filename = raw_input(‘Enter your file name’) #输入要...
python 文件操作seek() 和 telll() 自我解释 file.seek()方法格式: seek(offset,whence=0) 移动文件读取指针到制定位置 offset:开始的偏移量,也就是...readline(n):读入若干行,n代表读入的最长字节数。 readlines