Momentan habe ich ein Array der Größe N. Ich versuche, jede X Menge von Bytes aus dem Array zu kopieren.
Beispiel, wenn das Array Größe 10 ist und ich Arrays der Größe 3 möchte. Ich würde die ersten 3 Elemente dann die nächsten 3 und die letzte 1 kopieren.
Zur Zeit verwende ich den folgenden Algorithmus:
%Vor%Gibt es einen effizienteren oder vernünftigeren Weg, um das zu tun, was ich will? Dieser Algorithmus sieht ziemlich schlecht aus = l
Irgendwelche Ideen, wie ich es verbessern kann oder zumindest einen Hinweis?
Hier ist eine bequeme Methode , die ein byte[]
in ein Array von byte[]
konvertiert. Das Ergebnis ist also byte[][]
.
Einige Vorteile gegenüber der vorherigen besten Antwort :
for
verwendet <=
, was mehr Sinn macht als < ... + 1
. if
-Block reduziert. (Einheit getestet)
Wenige Dinge zu tun hier:
Erstens, häufige Konventionen, die apon nicht mit Großbuchstaben zum Starten von Variablennamen missfallen, ändern die Variablen I
und NewArray
in 'i' bzw. 'newArray'.
Dann funktioniert Ihr Code nicht, weil Ihr erstes Mal durch die Schleife i-3
zu einer IndexOutOfBounds-Ausnahme führen wird .....
Schließlich zeigen Sie nicht, wie Sie die Größe des newArray-Arrays festlegen.
%Vor%Hier ist meine Implementierung, die Ihr Array in Sub-Arrays bis zu einer maximalen Größe teilt, für die Sie sich entscheiden, und die Sub-Arrays in eine Liste von Arrays einfügen. Das letzte Array wird kleiner, wenn die Größe des Arrays kein Vielfaches der gewählten Maximalgröße ist.
%Vor%Sie können split mit einem speziellen regulären Ausdruck verwenden:
%Vor%Kredit zu früheren Post von Alan Moore. Bitte besuchen Sie und stimmen Sie ab.
Wenn Sie tatsächlich ziemlich große Blöcke benötigen und ihre Inhalte nicht unabhängig voneinander ändern möchten, sollten Sie dasselbe Ausgangsarray mithilfe von ByteBuffer.wrap()
und dann slice()
wiederholt verwenden. Dies würde unnötiges Kopieren und Speicherverschwendung verhindern.
Tags und Links algorithm java arrays performance