# viele errechnete werte sofort in datei schreiben oder sammeln und dann schreiben?



## larss (24. April 2005)

hallo,

ich möchte viele werte errechnen lassen und dann in eine datei schreiben. ist es besser, diese sofort nach berechnen in eine datei zu schreiben oder erst zu sammeln und dann in die datei schreiben zu lassen? mit welchen funktionen könnte man diese denn sammeln? am besten wäre ein kleines beispiel..

danke!


----------



## ToMeFox (24. April 2005)

Hi!

Generell sind Festplattenzugriffe eher gering zu halten! Geschwindigkeit und Material können darunter leiden... Es kommt immer darauf an, wie groß die Menge an Daten ist. Es gibt da viele Möglichkeiten je nach dem, was gespeichert werden soll! Ich gehe mal davon aus, dass du Zahlenwerte speicherst... Sind diese nur ganzzahlig oder gibts Nachkommastellen?

ZB:

```
double w1=1.777772932094
 double w2=1.92823
 double w3=1.05
 int       w4=5
```
Diese Werte könnten in einen StringBuffer geschrieben werden und nach der Berechnung
in die Datei geschrieben werden.


```
StringBuffer sb=new StringBuffer(); 

sb.append(String.valueOf(w1));
sb.append("#");             //Trennzeichen
sb.append(String.valueOf(w2));
sb.append("#");             //Trennzeichen
sb.append(String.valueOf(w3));
sb.append("#");             //Trennzeichen
sb.append(String.valueOf(w4));
sb.append("#");             //Trennzeichen
usw... (oder in einer Schleife)

dann ab in die Datei damit...
(Package java.io.*)
FileOutputStream out = new FileOutputStream ( "Der Pfad ...." );
out.write(sb.toString().getBytes());//->Vorsicht mit Umlauten wie ä ö usw---
                                          //    die werden von .getBytes() nicht richtig codiert
out.flush();
out.close();
```

Gruß Torsten!


----------



## larss (24. April 2005)

hallo torsten..

danke für deine antwort erstmal! 

genau das habe ich mir auch überlegt, da ich bedenken hätte, dass zuviele festplattenzugriffe das leben eben dieser verkürzt.. 

ich möchte 256 ganzzahlenwerte per zufall in bestimmten bereichen errechnen lassen, was nach 256 bytes wieder von vorne anfängt. die berechnung wiederholt sich demnach alle 256 bytes. diese schleife wird 256 mal durchlaufen (also insgesamt 65536 entstehende bytes)..

ein weiteres problem hab ich, da an die entstandene datei eine noch größere menge von bytes angehängt werden soll, die aber immer gleich sind. sollte ich diese einfach in einer extra-datei speichern, diese einlesen und der entstandenen anfügen? wie macht man das am geschicktesten?

gruß
lars


----------



## ToMeFox (25. April 2005)

Hallo nochmal!

Also wie du das machen willst, musst du entscheiden! Es würde beides funktionieren. Ich würde zwei Dateien schreiben. Das macht das auslesen einfacher, da du dann nicht mehr unterscheiden musst, ob es die Zahlen sind oder nicht... Ich hab da mal kurz ein kleines Beispiel zusammengetippert.. vielleicht hilfts!?

Ich speichere hier immer nach 256 erstellten Zahlen.. wie gesagt... wie du es machst.. hängt von dir ab!

Hoffentlich hilfts! Viel Glück!



```
package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;



public class StringBufferTest
{
    private int[] dasArray;

    private File datei1;

    public StringBufferTest()
    {
        this.dasArray = new int[256];
        this.datei1 = new File("c:/TestNummer.dat");
        try
        {
            // Dateien leeren...
            new FileOutputStream(this.datei1, false);
        } catch (FileNotFoundException e)
        {
            System.exit(1);
            e.printStackTrace();
        }

    }

    private void generateTheNumbers()
    {
        for (int iAussen = 0; iAussen < this.dasArray.length; iAussen++)
        {
            for (int iInnen = 0; iInnen < this.dasArray.length; iInnen++)
            {
                this.dasArray[iInnen] = (int) (Math.random() * 5000.0);
            }// end for
            this.speichereDasArray();
        }// end for
    }

    private void speichereDasArray()
    {
        OutputStreamWriter out = null;
        StringBuffer sb = new StringBuffer();

        // Erstelle die Daten

        for (int i = 0; i < this.dasArray.length; i++)
        {
            sb.append(String.valueOf(this.dasArray[i]));
            sb.append("#");// Das Trennzeichen
        }// end for

        try
        {
            // Parameter boolean true , lässt dich am Ende der Datei weiter
            // schreiben
            out = new OutputStreamWriter(
                    new FileOutputStream(this.datei1, true));
            out.write(sb.toString());
            out.flush();
            out.close();
        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
            System.exit(1);
        } catch (IOException e)
        {
            e.printStackTrace();
            System.exit(1);
        } finally
        {
            try
            {
                out.close();
            } catch (IOException e1)
            {
                ;// Nichts
            }
        }// end try / catch / finally
    }

    public static void main(String[] args)
    {
        StringBufferTest sb = new StringBufferTest();
        sb.generateTheNumbers();
    }
}
```

Grüßle Torsten!


----------



## larss (25. April 2005)

hi torsten..

vielen vielen dank, dass du dir soviel mühe gemacht hast

hab ein neues posting reingestellt (FileInputStream- / FileOutputStream-Problem.. PLEASE HELP..)und erst jetzt gesehen, dass du mir geantwortet hast..

hab da ein listing gepostet, das aber leider nur 1 byte in der enstehenden datei speichert. weißt du vielleicht einen rat?

grüße
lars


----------

