Die Java Utilities Scanner und Formatter sind zweifellos sehr komfortabel.
In dieser Übung lernt ihr [coderwiki]Informationen/Streams[/coderwiki] kennen und könnt euch von deren Performance überzeugen.
Alles anzeigen
Programmablauf:
In dieser Übung lernt ihr [coderwiki]Informationen/Streams[/coderwiki] kennen und könnt euch von deren Performance überzeugen.
Quellcode
- import java.io.*;
- import java.util.*;
- /**
- * @author Torben Brodt
- * @version 1.0
- *
- * <p />Performance Vergleich zwischen Streams und den Scanner/Formatter Utilities
- * <p />Funktioniert ab Java 1.5
- */
- public class A07_Randoms {
- // Globale Variablen fuer Sprachdateien und zur Konfiguration
- final static int max=100000;
- final static String writeSuccess = "Es wurden "+max+" Zufallszahlen in %s geschrieben\n\n";
- final static String middle = "Das arithmetische Mittel lautet: %d\n\n";
- /**
- * MAIN Funktion ruft das Abfragemenue auf
- * @param args -> keine Parameter
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- menu(0);
- }
- /**
- * Schnelles Verfahren zum Datei einlesen
- * @param filename Dateiname
- * @throws IOException
- */
- static void readStream(String filename) throws IOException {
- double mitte=0;
- DataInputStream input = new DataInputStream(
- new BufferedInputStream(
- new FileInputStream(filename)));
- for(int i=0; i<max; i++)
- mitte += input.readDouble();
- input.close();
- System.out.printf(middle, mitte/max);
- }
- /**
- * Schnelles Verfahren zum Datei auslesen
- * @param filename Dateiname
- * @throws IOException
- */
- static void writeStream(String filename) throws IOException {
- DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
- for(int i=0; i<max; i++)
- output.writeInt((Math.random()*100));
- output.close();
- System.out.printf(writeSuccess, filename);
- }
- /**
- * Einfaches Verfahren zum Datei schreiben
- * @param filename Dateiname
- * @throws FileNotFoundException
- */
- static void writeFormatter(String filename) throws FileNotFoundException {
- Formatter output = new Formatter(new File(filename));
- for(int i=0; i<max; i++)
- output.format((Math.random()*100) + "\n");
- output.close();
- System.out.printf(writeSuccess, filename);
- }
- /**
- * Einfaches Verfahren zum Datei auslesen
- * @param filename Dateiname
- * @throws FileNotFoundException
- */
- static void readScanner(String filename) throws FileNotFoundException {
- double mitte=0;
- Scanner input = new Scanner(new File(filename));
- while(input.hasNextLine())
- mitte += Integer.parseInt(input.nextLine());
- input.close();
- System.out.printf(middle, mitte/max);
- }
- /**
- * Menue (kann sich auch selbst aufrufen)
- * @param eingabe Tastatureingabe als Integer
- * @throws IOException
- */
- static void menu(int eingabe) throws IOException {
- switch(eingabe) {
- case 0: //Hauptmenue
- menu(ask("Bitte waehlen Sie:\n" +
- "1: Zahlen erzeugen und in Datei schreiben\n" +
- "2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen\n" +
- "3: Programm beenden"));
- break;
- case 1: //1. Navigationsebene Schreibe
- menu(ask("Bitte waehlen Sie:\n" +
- "1: Mittels Formatter\n" +
- "2: Mittels Streams")+10);
- break;
- case 2: //1. Navigationsebene Lese
- menu(ask("Bitte waehlen Sie:\n" +
- "1: Mittels Scanner\n" +
- "2: Mittels Streams")+20);
- break;
- case 3: //1. Navigationsebene Beenden
- System.out.println("Auf Wiedersehen");
- System.exit(0);
- break;
- case 11: //Zahlen erzeugen und in Datei schreiben
- writeFormatter(askFilename());
- break;
- case 12: //Zahlen erzeugen und in Datei schreiben
- writeStream(askFilename());
- break;
- case 21: //Zahlen aus Datei einlesen und arithmetische Mittel berechnen
- readScanner(askFilename());
- break;
- case 22: //Zahlen aus Datei einlesen und arithmetische Mittel berechnen
- readStream(askFilename());
- break;
- default:
- System.out.println("Fehler in der Eingabe. Bitte erneu versuchen.");
- }
- if(eingabe > 3)
- menu(0);
- }
- /**
- * Gibt eine Frage aus und liest einen Integerwert von Tastatur ein und liefert ihn zurueck
- * @param question Die Frage
- * @return Die Eingabe
- */
- static int ask(String question) {
- System.out.println(question);
- java.util.Scanner input = new java.util.Scanner(System.in);
- return input.nextInt();
- }
- /**
- * Fragt nach dem Dateinamen und gibt diesen zurueck
- * @return die Eingabe
- */
- static String askFilename() {
- System.out.println("Bitte geben Sie einen Dateinamen ein:");
- java.util.Scanner input = new java.util.Scanner(System.in);
- return input.next();
- }
- }
Programmablauf:
Bitte waehlen Sie:
1: Zahlen erzeugen und in Datei schreiben
2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen
3: Programm beenden
1
Bitte waehlen Sie:
1: Mittels Formatter
2: Mittels Streams
2
Bitte geben Sie einen Dateinamen ein:
zahlen.dat
Es wurden 100000 Zufallszahlen in zahlen.dat geschrieben
Bitte waehlen Sie:
1: Zahlen erzeugen und in Datei schreiben
2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen
3: Programm beenden
2
Bitte waehlen Sie:
1: Mittels Scanner
2: Mittels Streams
2
Bitte geben Sie einen Dateinamen ein:
zahlen.dat
Das arithmetische Mittel lautet: 49
Bitte waehlen Sie:
1: Zahlen erzeugen und in Datei schreiben
2: Zahlen aus Datei einlesen und arithmetische Mittel berechnen
3: Programm beenden
3
Auf Wiedersehen