2 x byte zusammenkopieren

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Abend,

wie kann ich 2 byte- Array am schnellsten zusammenkopieren?

byte[] b1;
byte[] b2;

muss ich da eine for- Schleife machen, oder geht das auch mit einer Zeile:

new byte[] {b1, b2}; geht leider nicht,

gute Nacht,
 

Marco13

Top Contributor
Schnell? Schnell zu schreiben oder schnell auszuführen? :wink:
Code:
private static byte[] combine(byte a[], byte[] b)
{
    byte result[] = new byte[a.length+b.length];
    System.arraycopy(a,0,result,0,a.length);    
    System.arraycopy(b,0,result,a.length,b.length);
    return result;
}
 

Marco13

Top Contributor
Eine Alternative für "kürzer" wäre vielleicht noch
Code:
    private static byte[] combineBB(byte a[], byte[] b)
    {
        byte result[] = new byte[a.length+b.length];
        ((ByteBuffer)ByteBuffer.allocateDirect(a.length + b.length).put(a).put(b).rewind()).get(result);
        return result;
    }

Ein kurzer Test legt die Vermutung nahe, dass das (deutlich) langsamer ist, aber vermutlich hauptsächlich wegen der hin- und her-Umwandlung. Wenn man überall auf ByteBuffern arbeiten würde, wäre es evtl. schneller.

Code:
import java.nio.*;
import java.util.*;


class ByteBufferCopyTest
{
    public static void main(String aaahhhrgs[])
    {
        verify(5);

        for (int size=1000000; size<=10000000; size*=10)
        {
            test(size);
        }
    }

    private static byte[] create(int size)
    {
        byte b[] = new byte[size];
        for (int i=0; i<size; i++)
        {
            b[i] = (byte)('A'+(int)(Math.random() * 27));
        }
        return b;
    }

    private static void verify(int size)
    {
        byte a[] = create(size);
        byte b[] = create(size);
        byte c0[] = combineAC(a, b);
        byte c1[] = combineBB(a, b);
        System.out.println("a  = "+Arrays.toString(a));
        System.out.println("b  = "+Arrays.toString(b));
        System.out.println("c0 = "+Arrays.toString(c0));
        System.out.println("c1 = "+Arrays.toString(c1));
    }

    private static void test(int size)
    {
        byte a[] = create(size);
        byte b[] = create(size);

        for (int runs=10; runs<=50; runs+=10)
        {
            testAC(a,b,runs);
            testBB(a,b,runs);
        }
    }

    private static void testAC(byte a[], byte b[], int runs)
    {
        long before = System.currentTimeMillis();
        int result = 0;
        for (int i=0; i<runs; i++)
        {
            result += combineAC(a,b).length;
        }
        long after = System.currentTimeMillis();
        System.out.println(String.format("%10d",result)+" Time for "+runs+" runs on arrays of size "+a.length+" with AC is "+(after-before));
    }

    private static void testBB(byte a[], byte b[], int runs)
    {
        long before = System.currentTimeMillis();
        int result = 0;
        for (int i=0; i<runs; i++)
        {
            result += combineBB(a,b).length;
        }
        long after = System.currentTimeMillis();
        System.out.println(String.format("%10d",result)+" Time for "+runs+" runs on arrays of size "+a.length+" with BB is "+(after-before));
    }


    private static byte[] combineAC(byte a[], byte[] b)
    {
        byte result[] = new byte[a.length+b.length];
        System.arraycopy(a,0,result,0,a.length);
        System.arraycopy(b,0,result,a.length,b.length);
        return result;
    }

    private static byte[] combineBB(byte a[], byte[] b)
    {
        byte result[] = new byte[a.length+b.length];
        ((ByteBuffer)ByteBuffer.allocateDirect(a.length + b.length).put(a).put(b).rewind()).get(result);
        return result;
    }
}
 

Marco13

Top Contributor
Hey - es geht NOCH kürzer, und genausoschnell (oder vielleicht einen winzigsten Hauch schneller) wie mit arrayCopy:

Code:
    private static byte[] combineBB(byte a[], byte[] b)
    {
        return ByteBuffer.allocate(a.length + b.length).put(a).put(b).array();
    }

:cool:
 

thE_29

Top Contributor
Ich hab noch eine Lösung!

Code:
  /**
   * 
   * @param buf1 byte[]
   * @param buf2 byte[]
   * @return byte[]
   */
  public static byte[] appendBytes(byte buf1[], byte buf2[])
  {
    ByteArrayOutputStream bOut = new ByteArrayOutputStream(buf1.length + buf2.length);
    bOut.write(buf1, 0, buf1.length);
    bOut.write(buf2, 0, buf2.length);
    return bOut.toByteArray();
  }

Ist aber die langsamste ;)

Jedenfalls ist bei mir die System.arrayCopy meistens schneller (um 16-32ms) als die letzte Lösung von Maro13 und bei 46ms steht bei mir meine Lösung :( (wobei arrayCopy 0ms braucht).

Habe 2 Dateien mit 700KB verknüpfen lassen.
 

Leroy42

Top Contributor
thE_29 hat gesagt.:
Jedenfalls ist bei mir die System.arrayCopy meistens schneller (um 16-32ms) als die letzte Lösung von Maro13 und bei 46ms steht bei mir meine Lösung :( (wobei arrayCopy 0ms braucht).

Habe 2 Dateien mit 700KB verknüpfen lassen.

Habt ihr sonst keine Probleme? :shock:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
Noahscript Aus einem byte Array Steuerungszeichen und Code bekommen und ersetzen Allgemeine Java-Themen 3
Thallius unsigned byte Allgemeine Java-Themen 18
N Byte Array in Java "dekomprimieren" Allgemeine Java-Themen 3
kodela Datentypen byte als unsigned interpretieren Allgemeine Java-Themen 23
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
TheWhiteShadow 2D-Grafik GIF Library mit byte output Allgemeine Java-Themen 10
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
A Byte zu String Allgemeine Java-Themen 4
RalleYTN Datentypen Unsignierter Byte zum signierten Byte Allgemeine Java-Themen 2
X Datentypen Byte geht nicht höher als 126 auch nicht mit casten? Allgemeine Java-Themen 22
R Byte Array Zeichensuche Allgemeine Java-Themen 6
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
O Byte-Array zu String Allgemeine Java-Themen 7
D Decodierung von Mp3-byte[] Allgemeine Java-Themen 4
A ByteBuffer.get(byte[] dst,int offset,int length) Allgemeine Java-Themen 2
A RandomAccessFile.read(byte[] b) Allgemeine Java-Themen 9
P Datentypen Warum überhaupt Byte ? Allgemeine Java-Themen 12
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
E Byte zu String & umgekehrt Allgemeine Java-Themen 3
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
M Chart per byte[] in JSP anzeigen Allgemeine Java-Themen 4
E int in byte Allgemeine Java-Themen 6
R ArrayList byte[] abspeichern Allgemeine Java-Themen 4
S byte [] in string und zurück konvertieren Allgemeine Java-Themen 2
G byte ? : Allgemeine Java-Themen 7
E Byte-Array to String: Zeichenkaputt Allgemeine Java-Themen 11
R In einem Byte-Array nach einer gewissen Zahlenfolge suchen Allgemeine Java-Themen 7
hdi Speicherbelegung byte, short, int Allgemeine Java-Themen 8
J byte - hex - byte.. casten Allgemeine Java-Themen 8
R byte[] to String Konvertieren Allgemeine Java-Themen 14
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
M byte array splitten Allgemeine Java-Themen 3
J Hex-String zu byte transformieren Allgemeine Java-Themen 7
T Zu doof für byte-Umrechnung ... Allgemeine Java-Themen 3
W CRC32 aus byte array Allgemeine Java-Themen 5
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
L byte -> byte[1] -> byte Allgemeine Java-Themen 2
P Einzelne Bits in einem Byte-Array setzen Allgemeine Java-Themen 2
Kr0e Synchronisieren: boolean,byte,char ? Allgemeine Java-Themen 2
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
Semox Byte-Manipulation eines Bildes Allgemeine Java-Themen 7
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
C int zu byte cast - verständnis Allgemeine Java-Themen 3
R int to byte[] Array Allgemeine Java-Themen 4
MQue byte[] Array to Integer Allgemeine Java-Themen 4
MQue Byte to Int convertieren Allgemeine Java-Themen 2
R Double Werte aus byte[] auslesen Allgemeine Java-Themen 5
W Verwendung von byte Allgemeine Java-Themen 9
G zu lange Byte code dateien Allgemeine Java-Themen 6
G String in byte- Array Allgemeine Java-Themen 3
E Byte [] nach hex, dann nach dec Allgemeine Java-Themen 2
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
G byte nach int Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
G Byte- List mit einem Iterator durchlaufen Allgemeine Java-Themen 5
W Konflikt byte->int, in.read->arraycopy Allgemeine Java-Themen 7
T "unsigned" byte[] -> BigInteger Allgemeine Java-Themen 2
F byte in hex-String oder: Wer hat in Mathe aufgepasst Allgemeine Java-Themen 3
T Socket Server Anwendung - Empfang eines Byte-Arrays Allgemeine Java-Themen 7
J NumberFormatException bei String->byte[] Allgemeine Java-Themen 12
ARadauer Blob aus byte Array erstellen? Allgemeine Java-Themen 3
T Object -> byte[] Allgemeine Java-Themen 5
G Byte[] zeichenweise lesen Allgemeine Java-Themen 4
G byte[] mit Strings füllen Allgemeine Java-Themen 2
B int -> byte Allgemeine Java-Themen 2
G file --> byte[] Allgemeine Java-Themen 7
E Problem beim Dateien kodieren ("Byte = Byte +1") Allgemeine Java-Themen 3
I String -> byte[] -> String Allgemeine Java-Themen 2
D byte nach integer? Allgemeine Java-Themen 4
MQue int in byte Allgemeine Java-Themen 18
G Maximalgröße von byte[] buffer Allgemeine Java-Themen 7
E String -> byte[] Allgemeine Java-Themen 6
C Byte[] to String Allgemeine Java-Themen 7
D datei in byte[]-array schreiben Allgemeine Java-Themen 6
D byte[] problem Allgemeine Java-Themen 3
MQue ArrayList in ein byte- Array Allgemeine Java-Themen 7
B ein spezielles Byte-Array sortieren Allgemeine Java-Themen 11
T OutputStream - Event bei Byte-Fluss Allgemeine Java-Themen 5
J byte-Array in Hashmap speichern? Allgemeine Java-Themen 3
S Problem beim Einlesen von byte-werten aus datei Allgemeine Java-Themen 2
J byte-Array als String übers http schicken Allgemeine Java-Themen 8
F List<String> zu byte[] Allgemeine Java-Themen 7
L byte vs. int Allgemeine Java-Themen 6
G Umwandlung Byte in Integer Allgemeine Java-Themen 12
N Byte-Code entschlüsseln (Bitmasks?) Allgemeine Java-Themen 3
R byte - string? Allgemeine Java-Themen 10
R Stream Byte für Byte durchgehen Allgemeine Java-Themen 5
S java.io.InputStream.read(byte[] b) überschreiben Allgemeine Java-Themen 33
B boolean array = byte array (platzverbrauch) Allgemeine Java-Themen 6
L byte[] to int Allgemeine Java-Themen 2
M Vector zu einem byte[] Allgemeine Java-Themen 5
C Byte Array aus Datei erzeugen Allgemeine Java-Themen 6
T BufferedImage aus einem byte-Array? Allgemeine Java-Themen 2
B Problem mit Einlesen vom Byte FF aus Dateien Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben