ein spezielles Byte-Array sortieren

Status
Nicht offen für weitere Antworten.
B

beurk

Gast
Hallo,

ich hab ein leicht verzwicktes Problem und möglicherweise kann mir jemand von euch helfen.
Ich hab eine Datei mit ca. 1.5 Mio. Ints bzw. 4-mal so vielen Bytes drin. Diese lese ich mittels InputStream in ein entsprechend großes Byte-array (die Größen sind vorher bekannt und daher kein Problem) ein.

Das eigentliche Problem besteht jetzt darin, dieses array zu sortieren und dabei soll der Inhalt als Integer interpretiert werden und nicht als Byte! Die Umwandlung in ein Int-Array ist aus Performancegründen und weil der Speicher begrenzt ist nicht möglich (Beides passt nicht gleichzeitig auf den Heap).

Nun meine 3 Lösungansätze:

1. Irgendwie (??) das 1-dimensionale byte-array auf ein byte[][4] casten. Ich schätze mal, dass es nicht möglich ist, aber vielleicht geht's ja doch :) Danach könnte ich locker Array.sort verwenden und einen simplen Comparator dazu erstellen.

2. Eine eigene Sortierfunktion schreiben. QuickSort und Konsorten sind bekannt, aber ich bezweifle, dass ich alle Tricks kenne um die gleiche Performance wie Array.sort zu erreichen.

3. Die Daten anders einlesen und direkt ein byte[][4] oder int[] Array erhalten. (Performance ist sehr wichtig!)


Was denkt ihr? (Ich tendiere wegen Unkenntnis für 1. und 3. zu Lösung 2)
 

Der Müde Joe

Top Contributor
Code:
Arrays.sort (items, new Comparator<Byte>(){

            public int compare(Byte o1, Byte o2) {

                return XXmyCompareMethodXX;

               }});

was spricht dagegen?
 
G

Guest

Gast
Wie sag ich der sort-Methode , dass er nicht alle Bytes sondern nur 4er-Blöcke von Bytes (also Ints) vergleichen soll?
 

Der Müde Joe

Top Contributor
so geht das nicht....

wrapper zb der immer 4 Bytes buschelt... und dann Wrapper comparen

oder direkt ein int einlesen (wohl in dem Fall am besten)
 
S

SlaterB

Gast
> Die Daten anders einlesen und direkt ein byte[][4] oder int[] Array erhalten.

wenn dir das int-Array als Möglichkeit offen steht, warum machst du es dann nicht?
das ist doch in jeder (bisher zu sehener) Hinsicht das beste,

ansonsten würde ich mir an deiner Stelle über die Geschwindigkeit eines eigenen Algoritmus nicht allzuviele Sorgen machen,
sofern die einen n log n-Algorithmus benutzt und allgemeine Fehler auslässt, kannst du nicht wesentlich langsamer werden als Arrays.sort,
und wenn der Speicher das Manko ist, ist doch meist Rechenzeit weniger wichtig? ;)
 
G

Gast

Gast
Das war mehr als Frage gedacht, wie man schnell das Ganze in ein int-Array einliest...

Wenn ich wüsste wie das geht, hätte ich das ja direkt so gemacht. Da aber die Standard-Input-Methoden nur auf Byte-Arrays basieren habe ich halt die benutzt.
 

Der Müde Joe

Top Contributor
stell sich die Frage, was bei dir ein byte darstellt???

zb... ein byte nehmen
zum int adden
dann int um 8 stellen verschieben (mit << 8)
byte 2 adden
8....etc
 
B

beurk

Gast
Mir ist durchaus klar, wie ich aus meinen Bytes einen Int mache, aber ich kann das nirgendswo speichern. Also muss ich es direkt so sortieren, passend casten oder gleich im richtigen Format einlesen.
 

Der Müde Joe

Top Contributor
lies 4 bytes ein.... ( 32 bit)

mach die operation toInt()

ins int array

und das ganze solange, bis alles eingelesen ist
 
S

SlaterB

Gast
oder einen DataInputReader benutzen und direkt ints lesen,
wobei natürlich noch gar nicht näher geklärt ist, was 'einlesen' genau bedeutet ;)
 
G

Guest

Gast
Der Müde Joe hat gesagt.:
lies 4 bytes ein.... ( 32 bit)

mach die operation toInt()

ins int array

und das ganze solange, bis alles eingelesen ist

Das dauert ewig. Kannst du ja mal testen.

SlaterB hat gesagt.:
oder einen DataInputReader benutzen und direkt ints lesen,
wobei natürlich noch gar nicht näher geklärt ist, was 'einlesen' genau bedeutet ;)

Einlesen == Datei auf Festplatte komplett in den Hauptspeicher kopieren.
...und DataInputReader mit readInt() ist äquivalent zu der Lösung vom müden Joe.
 
S

SlaterB

Gast
wenn es langsam ist, dann wahrscheinlich weil du immer 4 Bytes einzeln liest,
da musst du natürlich auf 10000 und noch viel höher erhöhen,

ob es direkt mit DataInputStream geht weiß ich nicht
(z.B. BufferedInputStream dazwischenschalten, oder direkt BufferedInputStream, da gibts ja auch paar read()-Operationen),
aber wenn nicht, dann ist die kleine toInt()-Operation ja kein Beinbruch,
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Spezielles Eingabefeld für Numerische Werte in Swing Allgemeine Java-Themen 2
H Unicode Darstellung in Java, spezielles Zeichen gesucht Allgemeine Java-Themen 4
G spezielles replace Allgemeine Java-Themen 3
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 2 x byte zusammenkopieren Allgemeine Java-Themen 7
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
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

Ähnliche Java Themen

Neue Themen


Oben