Input/Output Binärdatei über Bytestreams

Serbel

Mitglied
Hallo Leute,
Ich habe folgendes Programm, zu dem ich ein paar Fragen habe.
Java:
import java.io.*;

public class BinaerDateiErzeugenTest2 {
	public static void main (String [] args){
		
	  try {	
		File binaer2 = new File("binaer2.txt");    //?1
		FileOutputStream out = new FileOutputStream (binaer2);
		DataOutputStream dout = new DataOutputStream (out);

		dout.writeInt(3);                    
		dout.writeDouble(2.4);                  

		FileInputStream in = new FileInputStream(binaer2);
	    DataInputStream din = new DataInputStream (in);	
	    System.out.println("din.readDouble liefert: " + din.readDouble());//?2: Sehr merkwürdige Ausgabe
	    
	     System.out.println("din.readInt liefert: " + din.readInt());//?3: Sehr merkwürdige Ausgabe
		
	  }
	  catch (IOException e ){                   
	  	System.out.println(e);
	  }
	}
}

Also zu ?1:
Wieso wird die Datei binaer.txt angelegt ohne den Methodenaufruf createFile() der Klasse File; binaer.createFile() müsste man doch eigentlich noch hinzufügen


Zu ?2 und ?3:
"Programm wird ausgeführt ...
din.readDouble liefert: 6.8965899336E-314

din.readInt liefert: 858993459

Programm beendet"

Wieso erhalte ich so seltsame Ausgaben?
 
Du schreibst zuerst einen int wert, danach einen double. Dann musst du die natürlich auch in der Reihenfolge wieder auslesen 😉
Außerdem solltest du den dataoutputstream vor dem lesen schließen.
 
Grundsätzlich sollte man nicht gleichzeitig lesend und schreibend auf eine Datei zugreifen. == OutputStream schließen bevor er wieder eingelesen wird.

Zu Deinem Problem: Du musst die daten in der Reihenfolge wieder einlesen in der sie in die Datei geschrieben wurden.
 
Also zu ?1:
Wieso wird die Datei binaer.txt angelegt ohne den Methodenaufruf createFile() der Klasse File; binaer.createFile() müsste man doch eigentlich noch hinzufügen
Nein, sobald du Daten schreibst wird die Datei automatisch erstellt.
 
du schreibst ERST einen INT rein ... und dann einen DOUBLE

dann vergisst du erstmal noch das flushen und closen des outputstream

und dann willst du ERST den DOUBLE lesen und dann den INT ...

DAS GEHT NICHT !

du musst die daten auch in der reihenfolge lesen wie du sie geschrieben hast ... das ist ein serielles-medium ... kein stack !
 

Zurück
Oben