【问题标题】:Is Sequence input stream faster than file input stream序列输入流比文件输入流快吗
【发布时间】:2018-08-13 07:48:48
【问题描述】:

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

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 分钟时间来正确格式化/缩进您的代码!缩进很重要,并且缺乏适当的缩进(连同无意义的变量名)会使您的输入非常“没有人愿意看它”。
  • 然后:请考虑在某个时候接受有用的答案。似乎你一直在问问题,但很少接受答案......
  • 如果你关心性能,你根本不应该一个字节一个字节地传输文件。考虑try(FileChannel in1 = FileChannel.open(Paths.get("C:\\Eclipse\\File Output Stream.txt"), StandardOpenOption.READ); FileChannel in2 = FileChannel.open(Paths.get("C:\\Eclipse\\Buffer Output Stream.txt"), StandardOpenOption.READ); FileChannel out = new FileOutputStream(FileDescriptor.out).getChannel()) { in1.transferTo(0, in1.size(), out); in2.transferTo(0, in2.size(), out); }

标签: java file stream


【解决方案1】:

javadoc 非常清楚该类的用途

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

什么都没有只是一种抽象,它允许您轻松“连接”多个输入源。

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

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

换句话说:你的数字毫无意义,因此不可能从中得出任何结论。

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2012-05-16
    • 2011-05-13
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多