This time I used the new java.nio package for reading and writing.
Result (on my comp) are really pathetic for c++
Also, since the program spends most of the time in reading and writing
the file, I removed sorting from both java and C++ version (it's
irrelevant to IO test anyway).
(for one bible.txt)
Time for reading and writing files: 94 ms (java)
Time for reading and writing files: 78 ms (java)
Time for reading and writing files: 63 ms (java)
Time for reading and writing file: 156 ms (c++)
Time for reading and writing file: 156 ms (c++)
Time for reading and writing file: 156 ms (++)
Ten bibles (43 meg)
Time for reading and writing files: 766 ms (java)
Time for reading and writing files: 766 ms (java)
Time for reading and writing files: 782 ms (java)
Time for reading and writing file: 1828 ms (c++)
Time for reading and writing file: 1734 ms (c++)
Time for reading and writing file: 1703 ms (c++)
bible.txt is here
ftp://ftp.cs.princeton.edu/pub/cs126/markov/textfiles/bible.txt
========= Java version ===========
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class CopyFile
{
public static void main(String[] arg) throws Exception
{
FileChannel in = new FileInputStream("bible.txt").getChannel();
FileChannel out = new FileOutputStream("output.txt").getChannel();
long start = System.currentTimeMillis();
in.transferTo (0, in.size(), out);
out.close(); in.close();
long end = System.currentTimeMillis();
System.out.println("Time for reading and writing files: " +
(end - start) + " ms");
}
}
===== C++ Version =======
#include <ctime>
#include <fstream>
#include <iostream>
int main(int argc,char *argv[])
{
std::ifstream src("bible.txt");
std:
fstream dst("output.txt");
clock_t start=clock();
dst << src.rdbuf();
clock_t endt=clock();
std::cout <<"Time for reading and writing file: " <<
double(endt-start)/CLOCKS_PER_SEC * 1000 << " ms\n";
return 0;
}