序列输入流是否比文件输入流快

时间:2018-08-13 07:48:49

标签: java file stream

我想知道哪个更快。序列输入流或文件输入流。 这是我的示例程序

FileInputStream fileInput = new FileInputStream("C:\\Eclipse\\File Output Stream.txt");
FileInputStream fileInput1=new FileInputStream("C:\\Eclipse\\Buffer Output Stream.txt");
SequenceInputStream sequence=new SequenceInputStream(fileInput,fileInput1);
FileOutputStream outputSequenceStream=new FileOutputStream("C:\\Eclipse\\File OutputSequence Stream.txt");
int i=0;
byte[] b = new byte[10];
long start=System.currentTimeMillis();
//System.out.println(start);
while((i=sequence.read())!=-1){
    //outputSequenceStream.write(i);
    System.out.println(Integer.toBinaryString(i)+"  "+i+"  "+ (char)i);
}
System.out.println(System.currentTimeMillis()-start);
System.out.println("success");
System.out.println("Reading one file after another using file input");

FileInputStream fileInput2 = new FileInputStream("C:\\Eclipse\\File Output Stream.txt");
FileInputStream fileInput3=new FileInputStream("C:\\Eclipse\\Buffer Output Stream.txt");
start=System.currentTimeMillis();
/* Reading first file */
while((i=fileInput2.read())!=-1){
    System.out.println((char)i);
}
/* Reading second file */
while((i=fileInput3.read())!=-1){
    System.out.println((char)i);
}
System.out.println(System.currentTimeMillis()-start);
System.out.println("Success");

文件输入流给我的数字少于序列输出流的数字,这是否意味着序列比文件输入流慢呢?如果是的话,为什么我们使用序列流而不是使用文件输入流会更好呢?

1 个答案:

答案 0 :(得分:2)

javadoc对该类的用途非常清楚:

  

SequenceInputStream表示其他输入流的逻辑串联。它从输入流的有序集合开始,从第一个开始读取,直到到达文件末尾,然后从第二个开始读取,依此类推,直到在最后一个包含的输入流中到达文件末尾。

除了什么都没有,它是一种抽象,它使您可以轻松地“连接”多个输入源。

它根本不应该影响性能,从这个意义上讲,这里的“真实”答案是学习如何正确地对Java代码进行基准测试。初学者请参见here

最重要的是,您还忘记了操作系统。为了真正衡量IO性能,您应该使用不同文件(为避免OS首先将内容读入内存,而将所有后续读取都读入内存!) 100 MB的数据,而不是10位。

换句话说:您的电话号码简直毫无意义,因此不可能从中得出任何结论。