Wie konvertiere ich byte[]
zu Byte[]
und auch Byte[]
zu byte[]
, wenn keine Bibliothek eines Drittanbieters verwendet wird?
Gibt es eine Möglichkeit, es schnell zu machen, wenn Sie nur die Standardbibliothek verwenden?
Wie konvertiere ich byte[]
zu Byte[]
und auch Byte[]
zu byte[]
, wenn keine Bibliothek eines Drittanbieters verwendet wird?
Gibt es eine Möglichkeit, es schnell zu machen, wenn Sie nur die Standardbibliothek verwenden?
Byte[]
? Scheint keine gute Idee zu sein ... entweder verwenden byte[]
oder List<Byte>
.
Byte[]
, byte[]
wenn Sie null Referenzen haben ...
Antworten:
Byte
Klasse ist ein Wrapper für das Grundelement byte
. Dies 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();
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.
Byte.valueOf(byte)
. JavaDocs sagen, dass diese Methode im Allgemeinen dem Konstruktor vorgezogen werden sollte Byte(byte)
, da diese Methode wahrscheinlich eine deutlich bessere räumliche und zeitliche Leistung liefert, da alle Bytewerte zwischengespeichert werden.
byteObjects[i++] = b;
new Byte[bytes.length];
anstatt new Byte[10];
es vernünftig zu halten.
Byte [] zu Byte []:
byte[] bytes = ...;
Byte[] byteObject = ArrayUtils.toObject(bytes);
Byte [] zu Byte []:
Byte[] byteObject = new Byte[0];
byte[] bytes = ArrayUtils.toPrimitive(byteObject);
Sie können die toPrimitive-Methode in der ArrayUtils-Klasse der Apache Commons-Langbibliothek verwenden. Wie hier vorgeschlagen - Java - Byte [] bis Byte []
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 Byte[]
nach zu konvertieren byte[]
. Arrays
hat setAll
für double[]
,, int[]
und long[]
, aber nicht für andere primitive Typen.
byte[] toPrimitives(Byte[] oBytes)
{
byte[] bytes = new byte[oBytes.length];
for(int i = 0; i < oBytes.length; i++){
bytes[i] = oBytes[i];
}
return bytes;
}
Umgekehrt:
//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;
}
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 Byte [] 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];
}
Wenn jemand die Stream-API gegenüber normalen Schleifen bevorzugt.
private Byte[] toObjects(byte[] bytes) {
return IntStream.range(0, bytes.length)
.mapToObj(i -> bytes[i])
.toArray(Byte[]::new);
}