Randomaccessfile

Nocturnis

Mitglied
dieser code ist in einem meiner hefte er sollte in 10er schritten bis zur zahl 200 einträge erstellen und diese zahlen auslesen jedoch scheinen die Ergebnisse zusammenhanglos. Beispielweise an der position 5 bekomme ich die zahl 2560 … warum das ? Bitte helft mir zu verstehen warum derartige zahlen entstehen.


Java:
 package de.fernschulen.binaer3;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Binaer3 extends JFrame{
 
 //automatisch über Eclipse ergänzt
 private static final long serialVersionUID = 3935541564704692624L;
 //für die Schaltflächen
 private JButton einlesen, beenden;
 //für das Eingabefeld
 private JTextField eingabePosition;
 
 //die innere Klasse für den ActionListener
 class MeinListener implements ActionListener {
  @Override
  public void actionPerformed(ActionEvent e) {
   //wurde auf Lesen geklickt?
   if (e.getActionCommand().equals("lesen"))
    //dann die Datei einlesen
    datenLesen();
   //wurde auf Beenden geklickt?
   if (e.getActionCommand().equals("ende"))
    System.exit(0);
  }
 }
 
 //der Konstruktor
 public Binaer3(String titel) {
  super(titel);
   
  //ein GridLayout mit 2 Spalten anwenden
  setLayout(new GridLayout(0, 2));
  //ein Label und ein Eingabefeld
  add(new JLabel("Neue Position: "));
  eingabePosition = new JTextField("");
  add(eingabePosition);
 
  //die Schaltflächen
  einlesen = new JButton("Einlesen");
  einlesen.setActionCommand("lesen");
  beenden = new JButton("Beenden");
  beenden.setActionCommand("ende");
 
  MeinListener listener = new MeinListener();
  einlesen.addActionListener(listener);
  beenden.addActionListener(listener);
 
  add(einlesen);
  add(beenden);
 
  //gibt es die Datei daten.bin schon?
  File dateiTest = new File("daten.bin");
  //wenn nicht, erstellen wir sie neu
  if (dateiTest.exists() == false)
   datenSchreiben();
 
  //Größe setzen, Standard-Verhalten festlegen und anzeigen
  pack();
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setVisible(true);
 }
 //die Methode zum Lesen
 private void datenLesen() {
  //steht im Eingabefeld ein Wert?
  //sonst verlassen wir die Methode direkt wieder
  if (eingabePosition.getText().isEmpty())
   return;
  //geöffnet wird die Datei daten.bin im Nur-Lesen-Modus
  try (RandomAccessFile datei = new RandomAccessFile("daten.bin","r")){
   //für das Positionieren
   long neuePosition = 0;
   //die neue Position holen
   neuePosition = Long.parseLong(eingabePosition.getText());
   //ist die neue Position gültig?
   if (neuePosition <= datei.length()-4) {
    //dann positionieren
    datei.seek(neuePosition);
    //lesen und anzeigen
    add(new JLabel("Wert an Position: "));
    add(new JLabel(Integer.toString(datei.readInt())));
   }
  }
  catch (IOException e ) {
   JOptionPane.showMessageDialog(this, "Beim Laden ist ein Problem aufgetreten");
     }
  //das Fenster neu "packen"
  pack();
 }
 
 //die Methode zum Schreiben
 private void datenSchreiben() {
  //geöffnet wird die Datei daten.bin im Lese- und Schreibmodus
  try (RandomAccessFile datei = new RandomAccessFile("daten.bin","rw")){
   //20 Werte als int in die Datei schreiben
   for (int i = 0; i < 20; i++)
    datei.writeInt(i*10);
  }
  catch (IOException e ) {
   JOptionPane.showMessageDialog(this, "Beim Schreiben ist ein Problem aufgetreten");
     }
 }
}
 
K

kneitzel

Gast
Ein int sind 4 Bytes. Du schreibst also immer 4er Blöcke: und immer * 10!
00 00 00 00 ist die 0, die du schreibst
00 00 00 01 ist die 1, die du schreibst
00 00 00 02 ist die 2, die du schreibst.

Position 0 hat also: 00 00 00 00 => 0. Int
Position 1 hat also: 00 00 00 00
Position 2 hat also: 00 00 00 00
Position 3 hat also: 00 00 00 00
Position 4 hat also: 00 00 00 10 => 1. Int
Position 5 hat also: 00 00 10 00
Position 6 hat also: 00 10 00 00
Position 7 hat also: 10 00 00 00
Position 8 hat also: 00 00 00 20 => 2. int

Also zur besseren Erkenntnis ist das dann halt mal fett markiert, was die Bytes des 1. Int sind.

Und die Dezimale Zahl ist halt: 1. Byte * 256^3 + 2. Byte * 256^2 + 3. Byte * 256^1 + 4. Byte * 256^0
Und 10 * 256^1 ist nun einmal 2560

Wenn Du immer genau die Int Werte haben willst, dann müsstest Du die Position mit 4 multiplizieren:
neuePosition = Long.parseLong(eingabePosition.getText())*4;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
G Wie gebe ich einen Dateipfad in RandomAccessFile an? Java Basics - Anfänger-Themen 2
S TextArea, RandomAccessFile, Apend und andere Tricks... Java Basics - Anfänger-Themen 7
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
D RandomAccessFile Java Basics - Anfänger-Themen 2
P RandomAccessFile writeInt() und writeChar() Java Basics - Anfänger-Themen 3
L RandomAccessFile liest nicht alle Zeichen Java Basics - Anfänger-Themen 3
D Erste Schritte RandomAccessFile "Leerzeichen" löschen Java Basics - Anfänger-Themen 6
F Kann RandomAccessFile Zip Datei lesen? Java Basics - Anfänger-Themen 14
B Klassen RandomAccessFile Java Basics - Anfänger-Themen 7
B Collections RandomAccessfile & Linkedlist Java Basics - Anfänger-Themen 4
M Frage zur Klasse RandomAccessFile Java Basics - Anfänger-Themen 8
cosmic Frage zu der RandomAccessFile Klasse Java Basics - Anfänger-Themen 6
K RandomAccessFile Java Basics - Anfänger-Themen 4
T RandomAccessFile - Wie schreibe ich etwas in eine txt Datei? Java Basics - Anfänger-Themen 5
C RandomAccessFile vs. Streams Java Basics - Anfänger-Themen 5
D text dateien mit RandomAccessFile manipulieren Java Basics - Anfänger-Themen 6
T RandomAccessFile und der Dateipfad Java Basics - Anfänger-Themen 2
J RandomAccessFile löschen Java Basics - Anfänger-Themen 2
M RandomAccessFile Java Basics - Anfänger-Themen 3
G RandomAccessFile, FileChannel, MappedByteBuffer Java Basics - Anfänger-Themen 12
P Datei mit RandomAccessFile einlesen Java Basics - Anfänger-Themen 14
M RandomAccessFile schreibt Sonderzeichen vor String Java Basics - Anfänger-Themen 2
R RandomAccessFile mit anderen Streams verbinden Java Basics - Anfänger-Themen 5
J File, RandomAccessFile File wird größer Java Basics - Anfänger-Themen 8
J RandomAccessFile schreibt falsch Java Basics - Anfänger-Themen 2
G RandomAccessFile Java Basics - Anfänger-Themen 20
R RandomAccessFile Java Basics - Anfänger-Themen 4
R RandomAccessFile und ObjectoutputStream Java Basics - Anfänger-Themen 2
T RandomAccessFile erzeugt seltsame Zeichen Java Basics - Anfänger-Themen 2
P RandomAccessFile Java Basics - Anfänger-Themen 2
L RandomAccessFile und readChar readByte Java Basics - Anfänger-Themen 2
D konvertierungsprobleme bei RandomAccessFile Java Basics - Anfänger-Themen 4
L RandomAccessFile - Prob Java Basics - Anfänger-Themen 4
N RandomAccessFile(File, String) erstellt datei?! Java Basics - Anfänger-Themen 6
B RandomAccessFile Java Basics - Anfänger-Themen 12
M RandomAccessFile liest nur jeden zweiten Wert aus! Java Basics - Anfänger-Themen 8
G RandomAccessFile Java Basics - Anfänger-Themen 2
O RandomAccessFile komisch zeichen Java Basics - Anfänger-Themen 7
A RandomAccessFile Java Basics - Anfänger-Themen 7
B String in ein RandomAccessFile einfügen (bestimmte Position) Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben