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 UNICODE

    und 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.html

    das 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 Java

    wenn 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 arbeitet

    ich 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 konvertiert

    char[] 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
    

  • Mod

    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.


Anmelden zum Antworten