Byte konvertieren[] zu Byte[] und umgekehrt?

Lesezeit: 4 Minuten

Benutzer-Avatar
Benutzer926958

Wie konvertiert man byte[] zu Byte[] und auch Byte[] zu byte[]falls Sie keine Bibliothek von Drittanbietern verwenden?

Gibt es eine Möglichkeit, dies schnell zu tun, indem Sie einfach die Standardbibliothek verwenden?

  • 10 Fragen, EINE akzeptiert? Nicht gut

    – Alfabravo

    17. Oktober 2012 um 22:33 Uhr

  • Warum brauchen/haben Sie eine Byte[]? Scheint keine gute Idee zu sein … entweder verwenden byte[] oder List<Byte>.

    – Dünen

    17. Oktober 2012 um 22:38 Uhr

  • Könnte nützlich sein, wenn die Werte null sein können, obwohl es wahrscheinlich nicht sehr effizient ist (dh verschwendet den Platzvorteil des Speicherns von Bytes wegen all der Objektreferenzen)?

    – DNS

    17. Oktober 2012 um 22:40 Uhr

  • Aber man kann a nicht konvertieren Byte[] zu einem byte[] Wenn Sie Nullreferenzen haben …

    – Dünen

    17. Oktober 2012 um 22:41 Uhr

  • @BalusC ok, 1 von 7. Habe mich nicht viel verbessert!

    – Alfabravo

    17. Oktober 2012 um 22:43 Uhr

Byte[] zu Byte[] :

byte[] bytes = ...;
Byte[] byteObject = ArrayUtils.toObject(bytes);

Byte[] zu byte[] :

Byte[] byteObject = new Byte[0];
byte[] bytes = ArrayUtils.toPrimitive(byteObject);

  • Warum ist das nicht die beste Antwort? Irgendein Leistungsgrund oder nur später beantwortet?

    – mvorisek

    5. Dezember 2017 um 20:39 Uhr

  • Da die ArrayUtils kein Teil von Java sind, sondern Apache lib.

    – mvorisek

    5. Dezember 2017 um 20:41 Uhr

  • Ich stimme @mvorisek zu, dies sollte als die beste Antwort angesehen werden. Fügen Sie einfach org.apache.commons.lang3.ArrayUtils hinzu

    – Alex8752

    13. August 2020 um 15:08 Uhr

  • Leider, ArrayUtils ist kein Bestandteil von Standard-Java-Paketen.

    – Binita Bharati

    2. Juni 2021 um 6:34 Uhr

  • Apache Commons Lang ist ein großartiges Paket, das Teil jedes Java-Projekts sein sollte.

    – Frédéric Nobre

    24. Mai um 11:53 Uhr

Benutzer-Avatar
Juvanis

Byte Klasse ist ein Verpackung für das Primitiv byte. Das sollte die Arbeit erledigen:

byte[] bytes = new byte[10];
Byte[] byteObjects = new Byte[bytes.length];

int i=0;    
// Associating Byte array values with bytes. (byte[] to Byte[])
for(byte b: bytes)
   byteObjects[i++] = b;  // Autoboxing.

....

int j=0;
// Unboxing Byte values. (Byte[] to byte[])
for(Byte b: byteObjects)
    bytes[j++] = b.byteValue();

  • Würde auf jeden Fall empfehlen Byte.valueOf(b) Über new Byte(b). Ich wäre überrascht, wenn die Byte-Klasse nicht jeden einzelnen Wert für ein Byte zwischenspeichern würde.

    – Dünen

    17. Oktober 2012 um 22:34 Uhr

  • Ich glaube, dass es besser sein könnte, es zu verwenden Byte.valueOf(byte). Laut JavaDocs sollte diese Methode im Allgemeinen dem Konstruktor vorgezogen werden Byte(byte)da diese Methode wahrscheinlich zu einer deutlich besseren Speicherplatz- und Zeitleistung führt, da alle Bytewerte zwischengespeichert werden.

    – Edwin Dalorzo

    17. Oktober 2012 um 22:34 Uhr


  • Mit Autoboxing können Sie einfach tun byteObjects[i++] = b;

    – Code-Lehrling

    17. Oktober 2012 um 22:34 Uhr

  • Ich würde verwenden new Byte[bytes.length]; Anstatt von new Byte[10]; vernünftig zu halten.

    – BalusC

    17. Oktober 2012 um 22:37 Uhr


  • @Juvanis aha, ich sehe, dass Sie zwei “Zähler” in der For-Schleife verwenden: einen zum Durchlaufen des primitiven Byte-Arrays und/oder Byte-Objekt-Arrays und einen anderen zum Erhöhen des Index des primitiven Byte-Arrays und/oder Byte Objekt-Array. Für mich ist das schlechte Praxis. Wenn dieser Code von anderen verwaltet wird und jemand den Zähler “i” von 0 auf einen anderen Wert ändern oder das i++ in ++i ändern würde, stimmen die Indizes nicht mehr überein. Ich befürworte nicht, dass irgendjemand den Code überhaupt ändern sollte, aber es ist eine häufige Falle für Anfänger. Mein Vorschlag hält die Indizes beider Arrays synchron.

    – Benutzer504342

    8. Dezember 2013 um 13:29 Uhr

Java 8-Lösung:

Byte[] toObjects(byte[] bytesPrim) {
    Byte[] bytes = new Byte[bytesPrim.length];
    Arrays.setAll(bytes, n -> bytesPrim[n]);
    return bytes;
}

Leider können Sie dies nicht tun, um von zu konvertieren Byte[] zu byte[]. Arrays hat setAll zum double[], int[]und long[]aber nicht für andere primitive Typen.

  • Beste Antwort für mich. Einfacher Code und keine Bibliothek von Drittanbietern.

    – Liscare

    28. Mai 2021 um 8:28 Uhr

  • Wie hat das Upvotes, wenn es sich um Code handelt, der nicht funktioniert?

    – Steve Bosmann

    29. März um 8:21 Uhr

Benutzer-Avatar
Giannis

Sie könnten die toPrimitive-Methode in der ArrayUtils-Klasse der Apache Commons-Langbibliothek verwenden, wie hier vorgeschlagen – Java – Byte[] zu byte[]

byte[] toPrimitives(Byte[] oBytes)
{

    byte[] bytes = new byte[oBytes.length];
    for(int i = 0; i < oBytes.length; i++){
        bytes[i] = oBytes[i];
    }
    return bytes;

}

Umkehrung:

//byte[] to Byte[]
Byte[] toObjects(byte[] bytesPrim) {

    Byte[] bytes = new Byte[bytesPrim.length];
    int i = 0;
    for (byte b : bytesPrim) bytes[i++] = b; //Autoboxing
    return bytes;

}

Benutzer-Avatar
DNS

Von Byte[] zu Byte[]:

    byte[] b = new byte[]{1,2};
    Byte[] B = new Byte[b.length];
    for (int i = 0; i < b.length; i++)
    {
        B[i] = Byte.valueOf(b[i]);
    }

Von Bytes[] zu byte[] (unter Verwendung unserer zuvor definierten B):

    byte[] b2 = new byte[B.length];
    for (int i = 0; i < B.length; i++)
    {
        b2[i] = B[i];
    }

Benutzer-Avatar
mkalmo

Wenn jemand die Stream-API gegenüber gewöhnlichen Schleifen bevorzugt.

private Byte[] toObjects(byte[] bytes) {
    return IntStream.range(0, bytes.length)
            .mapToObj(i -> bytes[i])
            .toArray(Byte[]::new);
}

  • und umgekehrt?

    – Elektronisch

    26. Juli 2020 um 12:48 Uhr

  • Ich denke, du kannst kein Byte bekommen[] von Strom. Die Stream-API hat die Methoden mapToInt(), mapToDouble() und mapToLong(), aber nicht mapToByte().

    – mkalmo

    1. August 2020 um 9:36 Uhr

1256720cookie-checkByte konvertieren[] zu Byte[] und umgekehrt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy