Skip to content

Instantly share code, notes, and snippets.

@t1anchen
Last active December 20, 2015 00:19
Show Gist options
  • Save t1anchen/6040691 to your computer and use it in GitHub Desktop.
Save t1anchen/6040691 to your computer and use it in GitHub Desktop.
Benchmark for reading and parsing 10000000 integers
package org.coursera.algs4partII002.perf;
import org.junit.Test;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class BufferedScannerPerfTest {
@Test
public void testScanner() {
Scanner scanner = new Scanner(new BufferedInputStream(getClass().getResourceAsStream("/integers.dat")));
for (int i = 0; i < 10000000; i++) {
if (scanner.hasNext()) {
scanner.nextInt();
}
}
}
@Test
public void testBufferedReader() throws IOException {
StringTokenizer stringTokenizer = new StringTokenizer("", "\n");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/integers.dat")));
for (int i = 0; i < 10000000; i++) {
if (stringTokenizer.hasMoreTokens() != true) {
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
}
Integer.parseInt(stringTokenizer.nextToken());
}
}
}
// +------------------+--------------+-------------+--------------+-------------+--------+
// | Test | Time Elapsed | Usage Delta | Usage Before | Usage After | Result |
// +------------------+--------------+-------------+--------------+-------------+--------+
// |testBufferedReader| 2s| 491,542 Kb| 4,377 Kb| 495,920 Kb| Passed|
// +------------------+--------------+-------------+--------------+-------------+--------+
// | testScanner| 12s| 232,761 Kb| 495,920 Kb| 728,682 Kb| Passed|
// +------------------+--------------+-------------+--------------+-------------+--------+
package org.coursera.algs4partII002.perf;
import org.junit.Test;
import java.io.*;
import java.util.Random;
import java.util.logging.Logger;
public class GenIntegers {
@Test
public void genIntegers() throws ClassNotFoundException, IOException {
Random random = new Random(System.currentTimeMillis());
File integers = new File(Class.forName("org.coursera.algs4partII002.perf.BufferedScannerPerfTest").getResource("/").getPath() + "../../src/main/resources/integers.dat");
Logger.getAnonymousLogger().info(integers.getAbsolutePath());
if (integers.exists() == false)
integers.createNewFile();
BufferedWriter outputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(integers)));
for (int i = 0; i < 10000000; i++) {
int v = random.nextInt();
if (v < 0)
v = -v;
outputStream.append(String.valueOf(v));
outputStream.append("\n");
}
outputStream.close();
}
}
#include <cstdio>
int main(void) {
FILE *f = fopen("../../../target/classes/integers.dat", "r");
int N = 10000000;
int n = 0;
for(int i = 0; i < N; i++) {
fscanf(f, "%d", &n);
}
return 0;
}
// $ gcc -o ReaderPerfTest -Wall -O3 ReaderPerfTest.cc
// $ time `./ReaderPerfTest.exe`
//
// real 0m4.873s
// user 0m4.664s
// sys 0m0.155s
//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment