Sprungmarke funzt nicht

Status
Nicht offen für weitere Antworten.

Fluff

Mitglied
Das Prog soll einfach eine Bin-Datei "hex-cd" in eine neue "hex-out" kopieren -
(nur um die Funktion der Sprungmarke hinzubekommen, und gerade da hängt's):
Code:
// Imports
import java.io.*;

class T
{ public static void main ( String[] args ) throws IOException
  {
    RandomAccessFile inStr = new RandomAccessFile("hex-cd","r");    // wird nur zum lesen geöffnet


    File file_02 = new File("hex-out");   // für Dateizugriff auf hex-out
    file_02.delete();               // Löscht vorsichtshalber eine etwa bestehende Datei "hex-out"
                                    // diese sollte nicht durch ein anderes Program geöffnet sein
    RandomAccessFile outStr = new RandomAccessFile("hex-out","rw");  // und legt sie neu an (leer)
    File file_01 = new File("hex-cd");    // für Dateizugriff auf hex-cd

// Variablendeklaration:
    byte b000 = 0x00;

// Prog. selbst:
int zaehler = 1;
while ( zaehler < 2 ) // absichtliche Endlosschleife
     {

     b000 = inStr.readByte();

 if (b000 <  0xFF) { outStr.writeByte(b000); }

 if (b000 == 0xFF) { outStr.writeByte(b000); 
                     continue sprungmarke;   }
     }
sprungmarke:
                        // planmäßiges Ende:
 outStr.close();        // Datei "hex-out" schließen
 inStr.close();         // Datei "hex-cd"  schließen
  }
}
Die Fehlermeldung des Compiler ist:
Code:
java:30: undefined label: sprungmarke
                   continue sprungmarke;   }
                   ^
error
Hab schon so einiges versucht ???:L
Danke im Vorraus
 

Ark

Top Contributor
Man kann Sprungmarken nur auf Schleifenanfänge legen und diese Marken auch nur aus diesen Schleifen heraus benutzen, was impliziert, dass die Sprungmarke bereits bekannt ist, bevor sie einmal benutzt wurde (Letzteres erklärt die Fehlermeldung).

Ark
 

Fluff

Mitglied
Heist das, ich komme so aus dem if-Block nie raus und verlasse auch noch die while-Schleife?
Oder reicht es, wenn ich an das Ende einfach ein break anhänge?
Code:
 if (b000 == 0xFF) { outStr.writeByte(b000); 
                     continue sprungmarke;   }
break;
... was dann aber nur bei der letzten if-Anweisung funzt???
 

Ark

Top Contributor
Vermutlich wolltest du so was erreichen:
Java:
int b000;
while((b000 = inStr.read()) >= 0){ // nicht readByte()!
	outStr.writeByte(b000);
	if (b000 == 0xFF) break;
}
outStr.close();
inStr.close();
Warum du aber nach 0xFF aufhören willst, ist mir schleierhaft.

Ark
 

Fluff

Mitglied
Warum du aber nach 0xFF aufhören willst, ist mir schleierhaft.
In meiner Test-Datei ist das das letzte Byte - in "Echt" muss ich da noch etwas mehr schreiben - daher auch die vielen if-Blöcke - es ist eine Art Verschlüsselung ... - genau genommen eine Art Pack-Algorithmus.
 
Zuletzt bearbeitet:

Fluff

Mitglied
Habe das ganze jetzt so modifiziert:
Code:
int zaehler = 1;
while ( zaehler < 2 ) // absichtliche Endlosschleife
     {
     if (b000 == 0xFF) break;
     b000 = inStr.readByte();
     outStr.writeByte(b000); 
     }
Interessannterweise wird es anstandslos compiliert - zur Laufzeit ergibt aber den Fehler:
Code:
Exception in thread "main" java.io.EOFException
        at java.io.RandomAccessFile.readByte(Unknown Source)
        at T.main(T.java:32)
- das auch wenn die Datei hex-cd am Ende ZWEI Bytes "FF" hat - und EINS wird immer in die neue Datei kopiert, obwohl der break doch vorher steht.
Aber sonst funzt es wenigstens ...
Es gibt in der Ausgangs-Datei "Spezielle Bytes" die eine Pack-Methode anzeigen (daher brauche ich eigentlich einen Sprung aus einem if-Block in einer while-Schleife, heraus aus der while-Schleife, wobei ein "Spezielles Byte" mit Wert "FF" das Datei-Ende anzeigt -
(Ja für Profis geht es bestimmt ganz leicht - ich könnte die Datei-Größe abfragen und an die while-Schleife übergeben - ist mir gerade so eingefallen - aber allein das zu einem Programm zu bringen, was dann noch 100%ig läuft will ich mir ersparen, weil Anfänger ...)
 

Ark

Top Contributor
Bitte beachte den Hinweis, der eigentlich unübersehbar rot angebracht ist.

Das mit der Endlosschleife habe ich nicht grundlos anders geschrieben. ;) Zunächst einmal ist dein [c]zaehler < 2[/c]-Konstrukt total umständlich und verschlechtert die Lesbarkeit. Hinzu kommt (und das ist wichtiger), dass ich nicht readByte(), sondern read() verwende. Bitte lies dir die API-Dokumentation dazu durch, dann verstehst du auch, was es mit meinem [c]>= 0[/c] auf sich hat und warum du dir das mit 0xFF sparen kannst.

In deinem Versuch, dass Dateiende an 0xFF zu erkennen, findet sich ein schwerwiegender logischer Fehler: Im ersten Schritt kann dein [c]if[/c] nichts Sinnvolles überprüfen (schon das allein ist ein Fehler!), und nach dem Einlesen mittels [c]readByte[/c] (was du aus oben angedeuteten Gründen nicht tun solltest) wird das soeben eingelesene Byte unkontrolliert wieder rausgeschrieben; deswegen auch das 0xFF mehr am Ende.

Du solltest dein Konzept noch einmal überdenken und vor allem dir die API-Dokumentation zu Gemüte führen. Ich denke übrigens, FileInputStream und FileOutputStream sind für deine Aufgaben besser geeignet, zumal man dort Zugriffe leicht puffern kann.

Ark
 
G

Gast2

Gast
Moin,

solche Marker-Bytes machen bei Dateien keinen Sinn ... eine Datei hat immer einen Anfang und ein Ende ... beides lässt sich über die API finden

anders ist es im Netzwerk / COM-Port / $WHATEVER ... da gibt es keinen Anfang und kein Ende (mehr oder weniger schon - egal) ... und hier kannst Du ein Marker-Byte zur Synchonisation mit dem Stream verwenden - wird eigentlich in allen API's gemacht

hand, mogel
 

Fluff

Mitglied
... Ich denke übrigens, FileInputStream und FileOutputStream sind für deine Aufgaben besser geeignet, zumal man dort Zugriffe leicht puffern kann ...
Hatte ich am Anfang, ist aber für Anfänger ungeeignet, da ich dann ein Array erstellen muss und damit arbeiten, erschien mir schwieriger, es gibt einiges mehr zu beachten - lief nie ... Der Dateizugriff mit RandomAccessFile sind 2 Zeilen und vorher mit BufferedInputStream waren es 4.

... Du solltest dein Konzept noch einmal überdenken ...
Code:
int b000;
while((b000 = inStr.read()) >= 0){ // nicht readByte()!
    outStr.writeByte(b000);
    if (b000 == 0xFF) break;
Du hast die Variable b000 als int deklariert - ich noch als byte - ich denke es sollte byte bleiben?
 
B

Beni

Gast
Wenn du dir ganz viele Probleme mit Vorzeichen einhandeln willst, kannst du gerne byte verwenden. Möchtest du es bequem haben: benutze int, aber halt nur die letzten 8 bits.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Methodenaufruf in der Main Datei funzt nicht Java Basics - Anfänger-Themen 13
N Methoden Array vergleich funzt nicht Java Basics - Anfänger-Themen 8
B Programm funzt im defaultPackage. Aber nicht in einem anderen! Java Basics - Anfänger-Themen 6
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
K Methode funzt nicht, wieso? Java Basics - Anfänger-Themen 12
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
Back2theBizz Scanner Eingabe funzt nicht richtig! Java Basics - Anfänger-Themen 5
D String.replaceAll("{username}", to.getUserName()); funzt nicht Java Basics - Anfänger-Themen 4
M paint-Methode funzt nicht Java Basics - Anfänger-Themen 11
Z Schleife funzt nicht Java Basics - Anfänger-Themen 5
M Meine erste Java Programmierung funzt nicht :-( Java Basics - Anfänger-Themen 34
N Einfacherer Taschenrechner, ActionListener funzt nicht. Java Basics - Anfänger-Themen 8
B Compiler funzt nicht. Java Basics - Anfänger-Themen 12
J Klasse wird nicht vererb (extend funzt nicht??) Java Basics - Anfänger-Themen 11
M Nodes/LinkedList und insert funzt net Java Basics - Anfänger-Themen 9
A Warum funzt Prozedur nicht Java Basics - Anfänger-Themen 32
S Relative Pfadangabe funzt nicht Java Basics - Anfänger-Themen 2
Mike90 Java Compiler funzt nicht Java Basics - Anfänger-Themen 11
U enum.valueOf funzt nicht Java Basics - Anfänger-Themen 4
M Problem mit der For Schleife (else funzt nicht richtig) Java Basics - Anfänger-Themen 10
H Tokenizer funzt nicht Java Basics - Anfänger-Themen 3
B String Array funzt nich wie sollte Java Basics - Anfänger-Themen 3
V Generics mit Array funzt net ;( Java Basics - Anfänger-Themen 12
S MouseListener funzt net. Java Basics - Anfänger-Themen 5
G javac funzt net Java Basics - Anfänger-Themen 3
G Konvertierung von charArray in String funzt net Java Basics - Anfänger-Themen 3
G in String alle Kommas durch . ersetzten funzt nicht Java Basics - Anfänger-Themen 4
S regEx funzt nicht wie ich will Java Basics - Anfänger-Themen 3
P array funzt net gibt nur müll raus Java Basics - Anfänger-Themen 8
S setText funzt nicht - warum? Java Basics - Anfänger-Themen 14
G Hilfe, wieso funzt das net? Java Basics - Anfänger-Themen 18
G JavaMail funzt nur mit Adressen die ich vorher abgerufen hab Java Basics - Anfänger-Themen 3
G Methode int getRowCount (JTable) funzt nicht! Java Basics - Anfänger-Themen 7
J If-Abfrage Double != 0 funzt nicht Java Basics - Anfänger-Themen 6
P Methode funzt nicht => Zufallszahl darf nicht 2x erschein Java Basics - Anfänger-Themen 4
philipp If Abfrage von substring funzt net :( Java Basics - Anfänger-Themen 3
L Bubblesort funzt nicht Java Basics - Anfänger-Themen 3
Q Funzt net(oder Logikfehler?) Java Basics - Anfänger-Themen 2
E "Datei" > "Neu" funzt net Java Basics - Anfänger-Themen 5
T paint() wieder aus einder anderen methode aufrufen funzt nid Java Basics - Anfänger-Themen 2
F FileInputStream(File file) funzt net Java Basics - Anfänger-Themen 2
M Kompilierung funzt nicht! Java Basics - Anfänger-Themen 7
C deserialisiert Liste erneut benutzen funzt nicht! Java Basics - Anfänger-Themen 3
rambozola selbst definierte exception abfangen funzt nicht Java Basics - Anfänger-Themen 14
E umgededrehte if anweisung funzt nicht , iterator. Java Basics - Anfänger-Themen 2
G Modulo Division funzt nicht Java Basics - Anfänger-Themen 3
I Programm funzt nicht (NoClassDefFoundError)! Java Basics - Anfänger-Themen 3
C Calender set Methode beim Tag funzt nicht . Java Basics - Anfänger-Themen 2
C Tetxdatei ausdrucken funzt nicht Java Basics - Anfänger-Themen 2
G ActionListener in Panel funzt nur mit ActionCommand Java Basics - Anfänger-Themen 5
S FileWriter funzt nicht :( Java Basics - Anfänger-Themen 5
M Code funzt nicht wie ich es will! Java Basics - Anfänger-Themen 4
R Personalausweisprogramm funzt nich... Java Basics - Anfänger-Themen 7
G break out; funzt nicht Java Basics - Anfänger-Themen 7
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben