文件读取速度为什么这么慢! 建议一点一点的读,每次读完都flush一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for(int i=0;i<srcfile.length();i++){ double fi=(double)(100.0*i)/srcfile.length(); //System.out.println(indata.readInt()); //indata.readInt(); System.out.println(fi); pro.setValue((int)(fi));}你这个循环在干吗?如果按你所说,300K大的文件的话,那么srcfile.length()应该为300K,就是做差不多30万次的循环*&^%,这段代码的目的是什么,没看明白 可能搞错了,其实我想判断是否道文件尾,是不是用EOF判断呀? 使用文件通道,既快又准RandomAccessFile f = new RandomAccessFile (filename,"r");FileChannel fc = f.getChannel();fb = ByteBuffer.allocateDirect((int)fc.size());while(true){ int ret = fc.read(fb); if (ret == -1) break; fb.flip();//将缓存的读取位置置为开始}这时候用int BufSize = (int)TtC.size();就可以得到你的文件长度,单位是bytefb[BufSize-1];就是你的文件末尾用完以后用fb.clear();清空,用f.close();关闭文件总之,用这种方式读取文件可以非常灵活,能够通过对byte基本类型的转换实现任意转码,而且速度令人非常满意。参考http://expert.csdn.net/Expert/topic/1699/1699482.xml?temp=.3996546 我只看了这么一个代码段for(int i=0;i<srcfile.length();i++){ double fi=(double)(100.0*i)/srcfile.length(); //System.out.println(indata.readInt()); //indata.readInt(); System.out.println(fi); pro.setValue((int)(fi));}中间length()被执行了很多次,why not long len = srcfile.length();for(int i = 0; i < len; i++)仔细查一下有没有类似的问题 其实srcfile.length()没什么关系,因为srcfile里面包含length信息。 请问xmagicwuint BufSize = (int)TtC.size(); TtC是什么? 源代码见http://bbs1.nju.edu.cn/file/SuntowPrac.java To patronlee(patron) sorry,笔误。那是自己定义的一个FileChannel类型变量,在这段代码里面应该是int BufSize = (int)fc.size(); 谢谢 xmagicwu(死过方生) ,不过我现在发现读取速度不是太慢,所以还是用的BufferedInputStream,不过有书上说,BufferedInputStream得默认大小为52k,我想知道怎么改他的大小。 跪求Java数据结构视频教程 java 技术交流 成都的兄弟进 java代码版本不兼容,出来“使用了未经检查或不安全的操作” java中如何将byte[]型的数据存到Sqlserver中(急啊,在线等) java的API中的函数没有类似MSDN的例子请问是否有这类在线文挡 刚才运行的javabean还可以,现在却出错,为什么?? 菜菜的问:怎么打开一个shell窗口? Eclipse 2.1 与 CVSNT的问题 Happy new Year 初学者请教线程调度问题,附程序,多谢各位大哥大姐了!!! 我是java菜鸟,向大家请教
double fi=(double)(100.0*i)/srcfile.length();
//System.out.println(indata.readInt());
//indata.readInt();
System.out.println(fi);
pro.setValue((int)(fi));
}
你这个循环在干吗?如果按你所说,300K大的文件的话,那么srcfile.length()应该为300K,就是做差不多30万次的循环*&^%,这段代码的目的是什么,没看明白
RandomAccessFile f = new RandomAccessFile (filename,"r");
FileChannel fc = f.getChannel();
fb = ByteBuffer.allocateDirect((int)fc.size());
while(true){
int ret = fc.read(fb);
if (ret == -1) break;
fb.flip();//将缓存的读取位置置为开始
}这时候用int BufSize = (int)TtC.size();就可以得到你的文件长度,单位是byte
fb[BufSize-1];就是你的文件末尾
用完以后用fb.clear();清空,用f.close();关闭文件
总之,用这种方式读取文件可以非常灵活,能够通过对byte基本类型的转换实现任意转码,而且速度令人非常满意。参考http://expert.csdn.net/Expert/topic/1699/1699482.xml?temp=.3996546
for(int i=0;i<srcfile.length();i++){
double fi=(double)(100.0*i)/srcfile.length();
//System.out.println(indata.readInt());
//indata.readInt();
System.out.println(fi);
pro.setValue((int)(fi));
}
中间length()被执行了很多次,
why not
long len = srcfile.length();
for(int i = 0; i < len; i++)
仔细查一下有没有类似的问题
int BufSize = (int)TtC.size();
TtC是什么?
http://bbs1.nju.edu.cn/file/SuntowPrac.java
sorry,笔误。那是自己定义的一个FileChannel类型变量,在这段代码里面应该是
int BufSize = (int)fc.size();