byte Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Hallo, Hier mein kleines/grosses Problem. Ich habe ein Programm geschrieben in der eine Methode existiert die eine Datei, nach Übergabe des Dateinamen und des Schlüssels(ebenfalls in einer Datei gespeichert) entschlüsseln soll. Das ganze passiert nach einem sehr einfachem Substitutionsverfahren. Nun bin ich bei der Entwicklung allerdings auf einen Editor beschränkt und kann nicht vernünftig debuggen. Vielleicht wisst ihr ja einen Rat oder könntet es mal durchgehen. public void decryptCaesar(String key, String out) { try { RandomAccessFile raf = new RandomAccessFile(key, "r"); byte[] temp = new byte[(int)raf.length()]; raf.readFully(temp); int k = Integer.parseInt(temp.toString()); k = 255 -k; for(int i=0; i < data.length; i++) data[i] = (byte)(((int)data[i] - k) %255); raf = new RandomAccessFile(out, "rw"); raf.write(data); } catch(Exception e) { System.err.println("decryptCaesar(): " + e.toString()); } } [/PHP] Die Fehlermeldung zur Laufzeit lautet: decryptCaesar(): java.lang.NumberFormatException: For input string: "[b@18d107f" Falls ich was vergessen habe einfach nochmal nachfragen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast roaxius Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Also... ich kann es hier leider auch nicht mal eben zum Laufen bringen, so dass ich nur mal ein paar Fragen oder Anmerkungen habe... 1. Was macht byte genau? (Dann brauch ich nicht nachgucken ) Hierbei wird ein Array von bytes mit der Länge der Input-Datei angelegt?! 2. Passt das auf jeden Fall? Sprich: Reicht int da aus oder solltest du nicht besser big decimal oder long oder sowas nehmen? Würde mir hier mal eine Ausgabe setzen, wie lang das wird?! 3. Wieso parst du das hier: (int)raf.length() Liefert length() nicht immer int zurück? 3. NumberFormatException könnte passieren, wo du versuchst, temp.toString in einen Int zu parsen. Was steht denn in temp drin? Mach dir auch hier mal ne Ausgabe und guck nach, ob sich das denn parsen lässt... 4. Wo definierst du data? (Nur mal so am Rande? 5. Würde mir bei dieser zeile auch mal data, i, k und das Ergebnis von dem Modulo ausgeben lassen, damit du siehst, ob das uberhaupt geparst werden kann. 6. Bei der Errormeldung deiner Exception kannst du mit e.printStackTrace() oder so in der Art den kompletten "Weg" deiner Exception seit dem Auftreten anzeigen lassen. Damit würdest du genauer sehen, wo die herkommt... Das wars mal fürs erste. Sorry, wenn ich das hier nicht testen kann... Aber ich würde es erst mal mit den Ausgaben versuchen und gucken, ob die jeweiligen Sachen wirklich geparst werden können, weil NumberFormatException gerade hierbei einen Fehler vemuten lässt. Insbesondere, wenn du von String auf Integer parsen willst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
byte Geschrieben 27. Mai 2003 Autor Teilen Geschrieben 27. Mai 2003 Original geschrieben von roaxius Also... ich kann es hier leider auch nicht mal eben zum Laufen bringen, so dass ich nur mal ein paar Fragen oder Anmerkungen habe... 1. Was macht byte genau? (Dann brauch ich nicht nachgucken ) Hierbei wird ein Array von bytes mit der Länge der Input-Datei angelegt?! byte ist einfach nur ein Datentyp der durch seinen Namen beschrieben wird, ich brauche ihn, da ich damit besser die Algorithmen verwirklichen kann. In das Array schreibe ich als bytes die komplette Input-Datei, daher die länge. 2. Passt das auf jeden Fall? Sprich: Reicht int da aus oder solltest du nicht besser big decimal oder long oder sowas nehmen? Würde mir hier mal eine Ausgabe setzen, wie lang das wird?! Darum kann ich mir später gedanken machen, die Datei die ich zum Testen benutze lastet die Ressourcen da nicht im geringsten aus aber danke für den Tip. 3. Wieso parst du das hier: (int)raf.length() Liefert length() nicht immer int zurück? Nein. raf.length() liefer einen float oder long ich bin mir nicht ganz sicher aber nötig war es auf jeden Fall. 3. NumberFormatException könnte passieren, wo du versuchst, temp.toString in einen Int zu parsen. Was steht denn in temp drin? Mach dir auch hier mal ne Ausgabe und guck nach, ob sich das denn parsen lässt... In temp steht der Schlüssel den ich aus der Datei gezogen habe. Dieser ist auch nicht von besonderer grösse und muss da ich ihn als Zahl verwenden will(Es ist immer eine Zahl) zum Int geparst. 4. Wo definierst du data? (Nur mal so am Rande? data ist eine Globale variable, entschuldigung habe ich vergessen zu erwähnen und es ist bei solch einem Programm auch nicht ganz ungefährlich. 5. Würde mir bei dieser zeile auch mal data, i, k und das Ergebnis von dem Modulo ausgeben lassen, damit du siehst, ob das uberhaupt geparst werden kann. Werde ich nochmal überprüfen. Sollte imo aber auch ohne Probleme zu parsen sein, da ich das in vorigen Methoden eigentlich genauso gemacht habe. 6. Bei der Errormeldung deiner Exception kannst du mit e.printStackTrace() oder so in der Art den kompletten "Weg" deiner Exception seit dem Auftreten anzeigen lassen. Damit würdest du genauer sehen, wo die herkommt... Habe ich bereits gemacht. Brachte allerdings nicht wirklich etwas. Das wars mal fürs erste. Sorry, wenn ich das hier nicht testen kann... Aber ich würde es erst mal mit den Ausgaben versuchen und gucken, ob die jeweiligen Sachen wirklich geparst werden können, weil NumberFormatException gerade hierbei einen Fehler vemuten lässt. Insbesondere, wenn du von String auf Integer parsen willst. Danke das du dich mit dem Problem auseinandergesetzt hast. Vielleicht fällt dir ja nochwas ein. Ich könnte auch den SourceCode posten, da das Projekt ehh OpenSource ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast roaxius Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Original geschrieben von byte Danke das du dich mit dem Problem auseinandergesetzt hast. Gut, das war jetzt zwar keine Antwort auf meine Fragen und hört sich eher danach an, dass ich vollkommenen Blödsinn geschrieben habe Aber egal... Wenn du den gesamten Quelltext hier genauso postest wie du meine Antwort zitierst (nämlich komplett ) dann bekommst du aber bestimmt Ärger von den Mods Aber ernsthaft: Wenn die Ausgabe mit System.out.println(Variable) der jeweiligen Werte deiner Variablen nichts bringt, dann bräuchtest du wirklich einen Debugger. Aber vorhger würde ich erst mal so ausgeben?! Wo ist denn da das Problem? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
byte Geschrieben 27. Mai 2003 Autor Teilen Geschrieben 27. Mai 2003 Nocheinmal lesen und und merken das ich im Zitat kommentiert habe . Quelltext bau ich zusammen und lad ihn hoch, dann kann ihn sich angucken wer will. Vielleicht wird dann auch noch einiges klarer, kann aber noch einen Moment dauern mach jetzt erstmal Mittag. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast roaxius Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Ach, ne ne ne... Da hatte ich doch glatte keine Lust, mir meine Sache noch mal durchzulesen und hab das übersehen... :bimei Sorry Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast roaxius Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Original geschrieben von java.sun.com public final void readFully(byte[] throws IOException Reads b.length bytes from this file into the byte array, starting at the current file pointer. This method reads repeatedly from the file until the requested number of bytes are read. Gut, also nachdem ich mir die Klasse RandomAccessFile mit den Methoden readFully(byte[]) und length() mal angeguckt habe... : 1. Ok, du brauchst ein byte[] Array 2. length() liefert long zurück. Soweit so gut, aber ich denke du wirst wirklich int brauchen wegen der Indizierung des Arrays 3. readFully(byte[]) liest, so wie ich das verstanden habe, den gesamten Block der Länge deines byte-Arrays ein. Wieso meinst du dann, dass in temp der Schlüssel steht, den du aus der Datei gezogen hast? Versteh ich leider so nicht. Und wenn ich das richtig verstanden habe und der den gesamten byte[] Inhalt zieht, dann wäre es auch wirklich etwas schwierig, das in einen int zu parsen und du hättest hierbei das Problem. Oder steh ich hier irgendwie auf dem Schlauch? :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 new String(byte[] temp) Constructs a new String by decoding the specified array of bytes using the platform's default charset. Anstatt: temp.toString() Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
byte Geschrieben 27. Mai 2003 Autor Teilen Geschrieben 27. Mai 2003 Habe ich grade ausprobiert, erzielt genau das selbe Ereigniss. Aufgefallen ist mir grade das es dabei eindeutig um den Schlüssel handelt. Ich denke ich habe das Problem gefunden. Ich habe immer damit gerechnet das er eine Zahl in die Datei schreibt. Tut er aber nicht, er wandelt das irgendwie immer in ein ASCI-Zeichen um. Kann ich das irgendwie umgehen oder mir zu nutze machen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast roaxius Geschrieben 27. Mai 2003 Teilen Geschrieben 27. Mai 2003 Also ich sehe hier eigentlich auch wirklich den Fehler: Du liest ein komplettes Byte-Array in die Variable temp ein und dann versuchst du das komplette Byte-Array (also temp) in einem Rutsch in einen String zu machen und dann in int zu parsen. Das kann doch nicht funktionieren, oder? Edit: Ups, hab ich wohl etwas zu lange nicht mehr aktualisiert gehabt, bevor ich geantwortet habe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.