1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

byte array in string umwandeln

    • Frage
  • beat
  • 10. August 2007 um 10:46
  • Unerledigt
  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 10. August 2007 um 10:46
    • #1

    hallo,

    gibt es in java eine schnellere / elegantere möglichkeit aus einem byte[] einen String zu machen als folgende methode zeigt...

    String bla = String.valueOf(byteArray); geht nämlich net, gibt mir nur die Objektadresse.

    ps: frameContent ist das byte array.

    Code
    public String getFrameContentAsString() {
            String frameContentAsString = "";
    
    
    
            for(int i = 0; i < frameContent.length; i++) {
                frameContentAsString += Character.toString((char)frameContent[i]);
            }
    
            return frameContentAsString;
        }
    Alles anzeigen

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 10. August 2007 um 12:17
    • #2

    Wie wärs einfach mit

    Code
    String s = new String( framecontent );



    LG

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 10. August 2007 um 12:19
    • #3

    Ja gibt es:

    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#String(byte[],%20java.lang.String)

    Immer erst in der API nachschauen bitte.

    lg, Benjamin Ferrari, bookworm.at

  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 10. August 2007 um 12:32
    • #4
    Zitat von lerod

    Wie wärs einfach mit

    Code
    String s = new String( framecontent );

    LG

    Das macht ja intern das selbe was in meiner methode steht.

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 10. August 2007 um 12:40
    • #5

    Nun gut .. dann versteh ich aber nicht, was du genau willst. Vielleicht das Rad neu erfinden? :face_with_rolling_eyes:

    LG

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 10. August 2007 um 12:46
    • #6

    wobei ich aber glaub, dass die lösung

    Code
    String s = new String ( frameContent );

    effizienter arbeitet als deine implementierung.

    So wie du das als schleife gelöst hast, wird für jedes zeichen, das hinzugefügt wird, ein neuer Speicherbereich mit der neuen Größe allokiert, der alte Text kopiert, das neue Zeichen hinzugefügt und der alte Bereich wieder freigegeben.

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 10. August 2007 um 12:48
    • #7

    :winking_face:

    nein, passt eh. new String(byte[] b) is eh viel bequemer als das was ich gemacht hab. mach mir nur ein bissl sorgen um die Laufzeit da mein byte array sehr lang werden kann und da halt bei jeder iteration ein neues string objekt erstellt wird.

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 10. August 2007 um 12:58
    • #8
    Zitat von Erklärbär

    wobei ich aber glaub, dass die lösung

    Code
    String s = new String ( frameContent );

    ...für jedes zeichen, das hinzugefügt wird, ein neuer Speicherbereich mit der neuen Größe allokiert, der alte Text kopiert, das neue Zeichen hinzugefügt und der alte Bereich wieder freigegeben.

    und was glaubs du passiert im konstruktor String(byte[] string) der stringklasse? :winking_face:

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • Erklärbär
    8
    Erklärbär
    Mitglied
    Reaktionen
    6
    Punkte
    661
    Beiträge
    130
    • 10. August 2007 um 13:07
    • #9
    Zitat von beat

    und was glaubs du passiert im konstruktor String(byte[] string) der stringklasse? :winking_face:

    ich glaube, der allokiert genau 1x den Speicherbereich, der für das Array notwendig ist und befüllt das genau 1x und muss genau 0x wieder speicher freigeben

    einfach nur genial: wenn man im wort "Mama" 4 buchstaben ändert, dann hat man auf einmal "Bier"

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 10. August 2007 um 15:45
    • #10

    Ich glaube Erklärbär hat voellig recht. Glauben ist zwar gut, Wissen ist aber viel besser. Java ist Open Source.

    aus java.lang.String:

    Code
    ...
    
    
        /** The value is used for character storage. */
        private final char value[];
    
    
    ...
    
    
        public String(byte bytes[]) {
    	  this(bytes, 0, bytes.length);
        }
    
    
    ...
    
    
        public String(byte bytes[], int offset, int length) {
    	  checkBounds(bytes, offset, length);
    	  char[] v  = StringCoding.decode(bytes, offset, length);
    	  this.offset = 0;
    	  this.count = v.length;
    	  this.value = v;
        }
    
    
    ...
    Alles anzeigen
    Zitat von beat


    ...mach mir nur ein bissl sorgen um die Laufzeit da mein byte array sehr lang werden kann und da halt bei jeder iteration ein neues string objekt erstellt wird.

    Wenn Du genau weisst (d.h. wenn du es getestest hast), das ein bestimmter Teil deines Codes fuer Dein fertiges Programm unzureichend langsam ist, dann optimiere ihn. Vorher ist Lesbarkeit immer wichtiger. Pre-Optimierung fuert nur zu komplexerem Code. Und der schadet Deinem Programm viel mehr als er ihm nutzt.

    Es gibt natuerlich Faelle in denen man ziemlich genau weiss das der Code zu langsam laufen wird. Z.b. beim Verketten von Strings in Java mit dem '+' Operator:

    Zitat von beat


    frameContentAsString += Character.toString((char)frameContent[i]);

    Vermeide den '+' operator, um viele generische Strings miteinander zu verbinden. Verwende stattdessen einen java.lang.StringBuilder oder einen java.lang.StringBuffer.

    lass mal diesen Test laufen, das weisst Du warum:

    Code
    public final class Test {
    
    
      private final static int MAX = 50000;
    
      private String test1(){
        final StringBuilder sb = new StringBuilder();
        for(int i=0;i<MAX;i++){
          sb.append("X");
        }
        return sb.toString();
      }
    
    
      private String test2(){
        String s = "";
        for(int i=0;i<MAX;i++){
          s += "X";
        }
        return s;
      }
    
    
      public static void main(String[] args) {
        new Test().run();
    
      }
    
    
      private void run() {
    
        long time = System.currentTimeMillis();
        test1();
        System.out.println("Time needed for test1: " + (System.currentTimeMillis() - time));
        time = System.currentTimeMillis();
        test2();
        System.out.println("Time needed for test2: " + (System.currentTimeMillis() - time));
      }
    }
    Alles anzeigen

    lg, Benjamin Ferrari, bookworm.at

  • beat
    14
    beat
    Mitglied
    Reaktionen
    2
    Punkte
    2.007
    Beiträge
    338
    • 10. August 2007 um 18:01
    • #11

    cool, werd ich mir zu herzen nehmen.

    Visit: http://itunes.apple.com/de/artist/cbh-mobile/id338117761

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung