import java.io.*;
import java.io.File;
import java.io.FileFilter;
import java.lang.*;
import java.util.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader; public class test
{
public static void main(String[] args) throws Exception
{
InputStream in = null;
long s = System.currentTimeMillis();
try{
byte[] tempbytes = new byte[8192];
int byteread = 0;
in = new FileInputStream("test.txt");
while ((byteread = in.read(tempbytes)) != -1){
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null){
try {
in.close();
} catch (IOException e1) {
}
}
}
long e = System.currentTimeMillis() - s;
System.out.println("\nTime spend: " + e + "\t Per: " + (1.0 * e / 1000));
}
}
import java.io.File;
import java.io.FileFilter;
import java.lang.*;
import java.util.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader; public class test
{
public static void main(String[] args) throws Exception
{
InputStream in = null;
long s = System.currentTimeMillis();
try{
byte[] tempbytes = new byte[8192];
int byteread = 0;
in = new FileInputStream("test.txt");
while ((byteread = in.read(tempbytes)) != -1){
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null){
try {
in.close();
} catch (IOException e1) {
}
}
}
long e = System.currentTimeMillis() - s;
System.out.println("\nTime spend: " + e + "\t Per: " + (1.0 * e / 1000));
}
}
解决方案 »
- Eclipse 打包jar问题。。。
- 请教个问题,希望大家帮忙解答一下,多谢了。
- 求 数值排列java程序
- 关于获得当前时间的问题!·
- 学习java中,请教为什么是这样的结果呢?
- 各位老大救命,这么简单的代码错那了呀!!!!
- 很诡异的事
- 请问高手:IE是否支持applet的stop(),start()方法?
- iiop 怎样通过 cisco pix 防火墙(在线等待)
- <a href="#" title="真人发音" class="sp dictvoice voice-js log-js" data-rel="peninsu
- mac下终端javac中文乱码~求大神解决!!!
- 好久没回来了~请问下C#学到一定程度后进入JAVA容易吗?
重启整个电脑,不要碰那个50M的文件,然后直接运行你的class测试程序,再看看是否还是1秒?注意,50M的那个文件,必须不能是任何启动程序所已经使用的,必须保证其绝对没有被访问过。
这个我测试过N次了,重启机器读是 1.5秒,第二次执行读是1秒然后重启机器,读500M,竟然95秒,我不明白,是不是JVM内存不够?
确实有可能,虽然你所编写程序的过程是流式操作,但其实Java层面在进行读取的时候仍然是需要开辟内存空间的。所以结合8楼的建议,你尝试在启动时增加两个JVM参数:
-Xms1024m -Xmx1024m试试看。
我现在就是想把一个大的文本文件,比如2G,以最快的速度加载到缓存,别的什么事也不用做的
最好不要给任何变量赋值、不管是C,还是JAVA都行
32位JVM加载500M没问题的把?这个不是我要的效果,我希望的是50M 1.5秒,那么500M就是15秒
C:\>java -Xms1024m -Xmx1024m test耗时: 84.227
但为什么要把2G全部放内存中??
另外,我在我的电脑上完全测不出来你的效果,我觉得神了个奇的
我还特地打开了GC日志(-XX:+PrintGCDetails),想看看有没有内存频繁回收的问题,结果1次GC都没有!这是我程序: public static void scan(String filename) throws IOException {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
try {
long timer = System.currentTimeMillis();
byte[] buff = new byte[32 * 1024];
while (fis.read(buff) >= 0) {
// Do nothing
}
timer = System.currentTimeMillis() - timer;
System.out.printf("Readed: %,dKB\t\tSpend: %dms\t\tPerMS: %dKB\n", f.length() / 1024, timer, f.length() / 1024 / timer);
} finally {
fis.close();
}
}
我连续测试N个文件,大致如下:
Readed: 2,804KB Spend: 31ms PerMS: 90KB
Readed: 51,459KB Spend: 559ms PerMS: 92KB
Readed: 371,718KB Spend: 5361ms PerMS: 69KB
Readed: 710,687KB Spend: 12316ms PerMS: 57KB
Readed: 1,315,954KB Spend: 19811ms PerMS: 66KB
Readed: 1,773,173KB Spend: 20217ms PerMS: 87KB最后一个文件 1.7G,也就20秒搞完,平均每毫秒读取87KB