Ganz einfache Frage
-
Hallo!
Ich programmiere schon seit Jahren in C++ und möchte nun ein wenig Java lernen Wollte deshalb einfach nur ein bisschen rumspielen, eine Textdatei laden, und den Inhalt ausgeben...nur hier hakt es schon Gibt es in Java nicht sowas wie von einem Typen in einen anderen casten? Wieso kann ich das byte Array nicht einfach in char casten? Der Inhalt ändert sich ja nicht...muss man das wirklich so umständlich machen, wie ich es getan habe? Wie läuft das mit dem casten und kopieren vom einen in den anderen Typ ab? So miserabel, wie ich es gemacht habe? Kann ich nicht einfach testbyte als char Array nehmen, und schon das read in das char kopieren? Wie würde die "Umwandlung" (welche es ja nicht ist...byte und char müssten ja das Gleiche sein) von byte zu char aussehen?Achja, nochwas...wie kann ich f außerhalb des try-Blocks weiterbenutzen? Möchte nicht meinen gesamten Code in dem try-Block haben, nur weil ich ein new RandonAccessFile habe...
import java.io.*; public class Testprog { public static void main (String[] args) { RandomAccessFile f; byte[] testbyte; try { f = new RandomAccessFile("C:\\test.txt", "r"); testbyte = new byte[(int)f.length()]; f.read(testbyte); String a = new String(testbyte); System.out.println(a); } catch(FileNotFoundException e) { System.out.println("Fehler"); } catch(IOException e) { System.out.println("Fehler"); } } }
Danke,
Gruß,
Kevin
-
so einfach ist das eben nicht
char und byte sind eben nicht dasselbe
das mag in C++ so sein aber java nutzt intern nicht ASCII sondern UNICODEund dementsprechend sind byte und char unterschiedlich
byte ist 8 bits (also ein byte)
während char 16 bit gross ist
siehe
http://www.datasource.de/programmierung/tab32_javadatentypen.htmldas was du hier machst ist schon in ordnung - so wie du es machst
du kannst f einfach so ausserhalb der klammer weiterverwenden - solange du checkst ob es einen inhalt hat
was fuer ein problem hast du mit der nutzung von f
-
wenn ich f ausserhalb der Klammer verwende, sagt er mir, dass f möglicherweise nicht initialisiert wurde...habs mit if(f != null) probiert, geht aber nicht ...
Wie kann man denn dann ein gefülltes byte array in ein char array kopieren?Außerdem: Wie kann man das 5. Zeichen in einem String ändern? String bla = new String(deklariertesbytearray);
bla[5] = '\0'; geht nicht...muss nur diese "tiefen" Unterschiede erstmal wissen...Danke,
Gruß,
Kevin
-
das ist weil du f noch nicht initialisiert hast
tausche die erste zeile
RandomAccessFile f;
gegen
RandomAccessFile f = null;aus
und überprüfe dann mit if(f != null) ausserhalb des catch blocks
ein string ist KEIN char array in java
das sollte dir klar sein
du kannst mit charAt() dir einen char von einer bestimmten stelle holen
Du kannst keinen string verändern
Strings sind spezialobjekte in Javawenn du mehr möglichkeiten haben willst schau dir stringbuffer mal an
ich empfehle dir stärkstens dich mit dem java tutorial der sun seite bzw mit einem guten buch zu arbeiten
dein versuch
bla[5] = '\0';
ist der versuch einen string zu verkuerzen in C
nur leider funktioniert sowas in java nicht
\0 ist nicht das endzeichen eines strings, das ist C/C++ spezifisch wenn man mit char arrays arbeitetich hoffe ich konnte helfen
lg
gomberl
-
Hab ehrlich gesagt keine Lust, ewig viel über Java zu lesen, wo dann sowieso nur 3% neu sind Da mach ich lieber try and error...
Dann muss ich eben nur noch wissen, wie man ein byte Array in ein char Array konvertiert, und einen String abschließt
-
Surkevin schrieb:
Hab ehrlich gesagt keine Lust, ewig viel über Java zu lesen, wo dann sowieso nur 3% neu sind Da mach ich lieber try and error...
Dann muss ich eben nur noch wissen, wie man ein byte Array in ein char Array konvertiertchar[] c = new char[10]; byte[] b = new byte[10]; Arrays.fill(b, (byte)65); for(int i=0; i < c.length; i++) c[i] = (char)b[i]; for(int i=0; i<c.length; i++) System.out.println(c[i]);
und einen String abschließt
Strings sind in Java immutable und damit kannst du sie nicht so einfach abschließen. Wenn du einen String verändern willst, dann nimm StringBuffer:
StringBuffer b = new StringBuffer("hallo"); b.setLength(3); // b.delete() usw
-
Surkevin schrieb:
Hab ehrlich gesagt keine Lust, ewig viel über Java zu lesen, wo dann sowieso nur 3% neu sind
Es wundert mich, dass dir dieser Thread nicht schon gezeigt hat, dass es da mehr als 3% Unterschied gibt. Aus diesem Thread hättest du schon lernen können, dass du mit völlig falschen Vorstellungen an Java herangehst. Du willst bestimmte Vorgehensweisen aus C++ direkt auf Java "kopieren", damit wirst du aber nicht weit kommen, weil das so eben nicht möglich bzw. falsch ist. Wenn du dieses Verhalten nicht ablegst, dann wirst du auf deinem jetzigen Niveau bleiben und kein bischen weiterkommen.