2017-06-08 2 views
0

Ich arbeite an einem Programm, wo ich versuche, die Menge an Speicher zu reduzieren, die ich zuvor verwendet, um Strings zu verketten, aber das Problem war, dass ich diesen Prozess mehrere Millionen Mal und je mehr ich tat Je länger es dauerte, diese Zeichenfolgen zuzuweisen. Stattdessen versuche ich jetzt mit Bytes zu arbeiten. Ich möchte so etwas wie dies zu tun:Effiziente Verkettung von 2 Bytes in Java

byte[] arr = new byte[5]; 
byte cat = arr[0] + arr[1] //this addition would give me an error obviously. It's for demostration purposes 

System.out.println(cat); 

Ich will nur das erste Byte nehmen und die zweite gutmachen, nachdem er ohne jede Form von String-Klasse zu verwenden, da es mehr Aufwand erfordert Strings als solche verketten. Gibt es eine Möglichkeit, dies mit minimalen Operationen zu tun?

+0

Werfen Sie einen Blick auf diese [Frage] (https://stackoverflow.com/questions/11947138/combining-two-bytes-in-java) –

+1

Was wollen Sie die Bytes in verketten? Dein Code zeigt an, dass du versuchst, sie zu einem einzigen "Byte" zu verketten, was nicht viel Sinn ergibt. Zwei Bytes könnten ein 'byte [2]', ein 'short' oder ein' char' ergeben. –

+1

Sie müssten ein Byte-Array erstellen (oder, wie andere bereits erwähnt haben) bis zu 8 Bytes zusammen in ein größeres primitives Element wie short, int oder long packen. Aber wenn Ihre String-Verkettung zu lange dauerte - haben Sie StringBuilder oder '+'? – yshavit

Antwort

0

Erstellen Sie ein neues Ausgabe Byte-Array der Größe gleich der Summe aller Ihrer Bytes, die in einem neuen Byte-Array verkettet sind mit System.arraycopy()

Als System.arraycopy() nativen Anruf ist, wird es sicherlich schneller als String-Verkettung .

+0

Wie teuer ist System .arraycopy()? – ProgrammingCuber

+2

System.arraycopy() ist unabhängig von der Länge der effizienteste Weg zum Kopieren von Arrays. – mhasan

0

Wenn Sie zwei oder mehr Bytes „verketten“, in einen neuen Byte-Array, verwenden Sie einfach die array initializer Syntax:

byte a = 1; 
byte b = 42; 
byte c = 99; 

byte[] cat = {a,b,c}; 

System.out.println(Arrays.toString(cat)); // prints: [1, 42, 99] 

Ihr Beispiel ist jedoch eher mit einem substring() Anruf, und für die Sie sollte Arrays.copyOfRange() verwenden, z

byte[] arr = {5,4,3,2,1}; 

byte[] cat = Arrays.copyOfRange(arr, 0, 2); 

System.out.println(Arrays.toString(cat)); // prints: [5, 4] 
+0

Ich möchte kein neues Array Ich möchte nur ein neues Byte und keine String-Methoden verwenden, um die beiden Werte zu verketten. – ProgrammingCuber

+0

@ProgrammingCuber Aber zwei Bytes können nicht in einem einzigen Byte gespeichert werden. Sie können sie "hinzufügen", aber Sie bitten ausdrücklich, sie zu verketten. Ein Byte ist 8 Bits lang. Wenn Sie zwei Bytes haben (8 + 8 = 16 Bits), können Sie das nicht nur in einem Byte speichern. Ihre Anfrage ist unmöglich. – Andreas

+0

@ProgrammingCuber Es ist das gleiche wie Verketten von zwei Strings. Wenn die erste Zeichenfolge 3 lang und die zweite Zeichenfolge 5 lang ist, ist die verkettete Zeichenfolge 8 lang. Die Größe der Verkettung ist die ** Summe ** der Größen der Werte, die verkettet werden. – Andreas