Input/Output Binärdatei

Dingy

Mitglied
Hallo zusammen,

ich bin etwas durcheinander :/
Aufgabe ist es eine Binärdatei wahlfrei und sequentiell mit Text und mit Zahlen zu füllen und auszulesen.

Meine Fragen:
1. Kann ich mit einem Befehl gleichzeitig Text und Zahl in eine Binärdatei schreiben?
Ich habe das im moment so dass ich den text mit getBytes in ein byte Array schreibe und anschließend mit write() in die Datei schreibe. Richtig so?

2. Muss ich einen DataOutputStream verwenden oder geht das auch nur mit dem FileoutputStream? ???:L

3. Wie krieg ich das hindass beim wieder einlesen der Daten alles so angezeigt wird wie ich es eingegeben hab? :/
 
N

nillehammer

Gast
Aufgabe ist es eine Binärdatei wahlfrei und sequentiell mit Text und mit Zahlen zu füllen und auszulesen.
Dafür gibt es in Java eine Klasse RandomAccessFile: RandomAccessFile (Java Platform SE 7 )
Nutze sie.
1. Kann ich mit einem Befehl gleichzeitig Text und Zahl in eine Binärdatei schreiben?
In eine Binärdatei schreibst Du bytes. Was diese repräsentieren ist egal.
2. Muss ich einen DataOutputStream verwenden oder geht das auch nur mit dem FileoutputStream?
Die Verwendung von Streams verbietet sich hier. Mit Streams hast Du nur sequenziellen Zugriff und nicht -wie gefordert- wahlfrei. Dafür siehe RandomAccessFile.
3. Wie krieg ich das hindass beim wieder einlesen der Daten alles so angezeigt wird wie ich es eingegeben hab? :/
Das ist die krux an der Anforderung Binärdatei. In Binärdateien stehen ja eigentlich "nur" bytes, die Du dann selbst interpretieren musst. Für einfachere Dateiformate bietet RandomAccessFile aber schon recht praktische readXXX-Methoden an.
 

Dingy

Mitglied
Danke schonmal. Ich würde ungern die Aufgabe und den bisherigen Code posten da es ein Projekt fürs Studium ist.

Ich muss wahlfrei und sequentiell auf die datei zugreifen können.

Bin ach schon fast fertig. Hab nur nochmal ein paar fragen um sicher zu gehen dass ich nicht falsch liege. Also ich muss String und Int werte in die Binärdatei schreiben. Zum Beispiel "Hauptstraße,35". Also die Straße als String und die hausnummer als Int Wert.

Wahlfrei schreibe ich die Datei mit RandomAccessFile. Dabei benutze ich den Befehl .writeBytes(Straße) für die Straße und den Befehl .writeByte(Hausnummer) für die Hausnummer. Richtig so?

Sequentiell benutze ich den DataOutputStream. Dabei wandele ich die Straße erst mit Straße.getBytes(); um und schreibe dann das Ergebnis mit .write() in die Datei. Die Hausnummerschreibe ich mit .write((byte)Hausnummer) in die Datei. Auch hier richtig so?

Das Problem liegt jetzt beim Lesen. In der Binärdatei steht jetzt zum Beispiel folgendes: "Hauptstraße,1E". Die Hausnummer ist also als Hexwert eingetragen was ja auch richtig ist. Jetzt lese ich das ganze mit einem DataInputStream Byteweiße ein. Das Problem ist nur dass ich ja di hausnummer mit (int) umwandeln muss und die Straße mit (char). Da das ganze mi einem Komma getrennt ist dachte ich mir ich mach das folgendermaßen:

Java:
while ((b = dis.read())!=-1) {
int z=0;
String sb = "" + (char)b;
if (z=0)
{ System.out.print ((char)b);
}
else
{ System.out.print ((int)b);
z=0;
}
if (sb == ",") 
{ z=1;
}
}

Also ums einfach zu sagen. Wenn ein Komma kommt dann soll er das nächste Byte als Int ausgeben.
Das funktioniert nur leider nicht :/ Er geht in die Schleife wo er z=1 setzen soll nicht rein. Weiß jemand woran das liegt?

Sorry für den langen Text :/
 

jenkinz

Mitglied
ok, zwei Sachen:

1. solltest du
Java:
int z = 0
vor der while-Schleife definieren, weil sonst der Wert bei jedem Durchlauf auf 0 gesetzt wird.

2. in der 4. Zeile weist z den Wert 0 zu anstatt auf Gleichheit zu prüfen.

Noch ein kleiner Tipp: da z 1 oder 0 sein kann, wäre es hier sinnvoll ein Boolean zu nehmen.

Das ganze sieht dann so aus:

Java:
boolean z=false;
while ((b = dis.read())!=-1) {
   String sb = "" + (char)b;
   if (z==false){ 
      System.out.print ((char)b);
   }else{ 
      System.out.print ((int)b);
      z=false;
   }

   if (sb.equals(",")) { 
      z=true;
   }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Binärdatei Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben