Java: Eine Datei mit zufälligem Inhalt erzeugen

am Mittwoch, 23. Juli, 2008 - 14:07 von Herbi

Aus aktuellem Anlass habe ich mir ein kleines Tool geschrieben, welches eine Datei mit zufälligem Inhalt erzeugen kann.

Das Problem dabei ist, dass die Anwendung schnell an ihre Grenzen im Hauptspeicher stößt und abbricht. Das ist dadurch zu lösen, indem man die Daten stückweise erzeugt und schreibt. Auf diese Weise benutze ich weniger RAM, iteriere aber das Schreiben der zufälligen Daten umso mehr.
Dabei werden die Iterationen anhand der gegebenen Einheit bestimmt und die Größe der auf einmal erzeugten Daten anhand des angegeben Größenwertes. Diese Methode ist sehr einfach und kann noch um einiges optimiert werden. Auch wird dadurch unter Umständen das eigentliche Problem nicht gelöst, da der Benutzer immer noch durch Angabe des Größenwertes (unbeachtet der Einheit) die Nutzung des Speichers beeinflussen kann.

Eine automatische Bestimmung der optimalen Anzahl von Iterationen und der optimalen Größe von auf einmal erzeugten Zufallsbytes würde hier also einerseits die Stabilität der Anwendung garantieren. Die Laufzeit würde sich nicht sehr unterscheiden, da in jedem Falle ungeachtet der Anzahl von Iterationen eine bestimmte Menge von Zufallsbytes erzeugt werden müssen.

/**
 * This class is used to create a file with random data.
 * @author Sebastian Herbermann
 */
public class FileCreator
{
    /**
     * Creates a file of the given size at the given place with random data.
     * @param file location und name of the file
     * @param size size of the file
     * @param unit expected unit for the filesize
     * @return true if file was created, false if an error occured
     */
    public static boolean createRandomFile
            ( String file, int size, FilesizeUnit unit )
    {
        int repetitions = 1;
        switch (unit)
        {
            case KiloByte:
                repetitions = repetitions * 1024;
                break;
            case MegaByte:
                repetitions = repetitions * 1024 * 1024;
                break;
            case GigaByte:
                repetitions = repetitions * 1024 * 1024 * 1024;
                break;
        }
        try {
            FileOutputStream os = new FileOutputStream(file);
            Random rnd = new Random();

            // create rather few random values to reduce RAM use
            while ( repetitions > 0 )
            {
                byte[] bytes = new byte[ size ];
                rnd.nextBytes( bytes );

                os.write( bytes );
                repetitions --;
            }

            return true;

        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
    }

    public static void main(String args[])
    {
        // create a 500 MB file named "test.file"
        createRandomFile("test.file", 500, FilesizeUnit.MegaByte);
    }
}

public enum FilesizeUnit {
    Byte, KiloByte, MegaByte, GigaByte
}

Über den Sinn einer solchen Klasse kann jeder selbst entscheiden. Wer seine Festplatte einmal füllen möchte, kann hiermit bestimmt viel anfangen.


Kategorien: Coding
Tags:

Buchempfehlung für Java-Einsteiger

am Dienstag, 13. November, 2007 - 23:10 von Herbi

Objektorientierte Programmierung in JavaFür alle, die einmal gerne Java lernen möchten und noch keiner Programmiersprache mächtig sind, ist das Buch Das Einsteigerseminar Objektorientierte Programmierung in Java. Der methodische und ausführliche Einstieg eine gute Wahl.

Das Buch bietet einen leichten Einstieg in die heute aktuelle objektorienterte Programmierung und vermittelt die Programmiersprache Java, die voll auf der objektorientierten Programmierung aufbaut, ohne sich in Details zu verlieren.
So bekommt man schnell einen Überblick über grundlegenden Konzepte und lernt anhand von Programmierbeispielen den Umgang mit allgemeinen Konzepten der Programmierung und dem Umgang mit einer Programmiersprache.

Das Buch ist mit Witz geschrieben, liest sich gut und vermittelt dabei auf eine unbeschwerte Weise wichtiges Wissen. Als Nachschlagewerk ist das Buch nach dem Lesen auch immer noch zu gebrauchen.

Während des Lernprozesses werden die praktischen Programmierkenntnisse zunächst mit kleinen Aufgaben vermittelt, später entwickelt man eine Fahrzeugverwaltung. So kommt man auch schon in Berührung mit einem “etwas größerem” Projekt und arbeitet nicht immer direkt in den Papierkorb hinein. Dies fördert die Motivation ungemein.

Daher kann ich persönlich jedem Anfänger das Buch empfehlen. Für einen Preis von nichtmal 12,- EUR lohnt sich der Kauf allemal. Wer das Buch am besten schon morgen lesen möchte, kann dies auch bei Amazon.de bestellen.


Sprüche klopfen

am Mittwoch, 24. Oktober, 2007 - 14:03 von Herbi

Heute haben zwei IT-Sprüche für euch.

Der Erste ist eine gute Weisheit für jeden Entwickler und vor allem die Programmierer:

“It is often easier to not do something dumb than it is to do something smart.”

Der zweite Spruch richtet sich gegen bezieht sich auf eine Programmiersprache.

“Saying Java is good because it works on all operating systems, is like saying anal sex is good because it works on all genders.”

Allerdings kann ich diesem Spruch nicht wirklich zustimmen, auch wenn er in jeder “Java oder C” – Diskussion gut ankommt.


Kategorien: IT
Tags: