Input/Output Viele short aus Datei lesen und von Little Endian zu Big Endian umwandeln

Muhaha

Mitglied
Hi, wie kann ich möglichst schnell sehr viele short aus einer Datei auslesen und von Little Endian zu Big Endian umwandeln?

Bis jetzt habe ich es so gemacht:

Code:
short s;
DataInputStream instream = new DataInputStream(new InputStream(...));
for (int i = 0; i < g; i++) {
	s = instream.readShort();
	sounds[j] = (short) (((((s & 0xff) << 8) | ((s >> 8) & 0xff)) << 16) >> 16);
}

Gibt es eine schnellere Methode?
 

Kevin94

Top Contributor
Weis nicht ob es schneller geht, aber über ByteBuffer:
Java:
InputStream in=...;
byte[] tmp=new byte[in.available()];
in.read(tmp);
ByteBuffer byteBuf=ByteBuffer.wrap(tmp);
byteBuf.order(ByteOrder.LITTLE_ENDIAN);
sounds=byteBuf.asShortBuffer().getArray();

Auserdem kann man bei einem ObjektInputStream afaik die ByteOrder auch einstellen.
 

Muhaha

Mitglied
Danke erstmal.

Das Problem bei der Lösung mit dem ShortBuffer/ByteBuffer ist, dass man die Methode shortBuffer.array() nur nutzen kann, wenn man den ShortBuffer nicht aus einem ByteBuffer erzeugt hat.
 

Marco13

Top Contributor
shortBuffer.array() liefert nur einen Array, wenn der Buffer mit ShortBuffer.wrap(shortArray); erzeugt wurde. (Abgesehen davon: 'nativ' ist alles, was erstmal durch den JIT gelaufen ist ;) )

Ob es gut oder sinnvoll ist, ALLE Daten einzulesen, weiß ich nicht. Aber grundsätzlich kann man natürlich auch mit einem Chunk arbeiten. Also als letzte Zeile von dem, was Kevin94 gepostet hatte, dann eben
shortBuffer.get(shortArray);
um die Daten in den Array zu schreiben. Oder gleich die Datei als MemoryMapped file (über FileChannel) mappen, dann spart man sich den Umweg über den byte[] array.
 

Kevin94

Top Contributor
Selbst wenn die Methode array() nicht verfügbar ist, dürfte folgendes immer noch übersichtlicher und vermutlich auch schneller sein:
Java:
ShortBuffer buf=byteBuf.asShortBuffer();
sounds=new short[buf.capacity()];
buf.get(sounds);
 

Muhaha

Mitglied
Selbst wenn die Methode array() nicht verfügbar ist, dürfte folgendes immer noch übersichtlicher und vermutlich auch schneller sein:
Java:
ShortBuffer buf=byteBuf.asShortBuffer();
sounds=new short[buf.capacity()];
buf.get(sounds);
Das wollte ich eigendlich nicht machen, da ich so ja zu einen Zeitpunkt das doppelt an Speicher benötige und der Code auf einem Smartphone laufen soll.

Wenn ich immer nur einen Teil der Datei lese und bearbeite, wieviel sollte ich da aufeinmal laden? Ich dachte mir, am Anfang, dass ich immer soviel lade wie available() zurückgibt, aber in der JavaDoc zu der Methode steht, dass man sich darauf nicht verlassen kann.
 

Marco13

Top Contributor
Wenn es und Sounds geht, ist das so eine Sache - die müssen ja auch irgendwo verarbeitet werden, und das geht prinzipbedingt nicht unendlich schnell, sondern ohnehin nur in der Geschwindigkeit, mit der sie absgespielt werden.
 
S

Spacerat

Gast
Das wollte ich eigendlich nicht machen, da ich so ja zu einen Zeitpunkt das doppelt an Speicher benötige...
[STRIKE]Das ist nicht ganz richtig.[/STRIKE] Von einem ShortBuffer wirst du kein short-Array bekommen (eher 'ne UnsupportedOperationException), solange du ihn per ByteBuffer erstellst (egal ob direct oder nicht). Das Array bleibt stets das per wrap übergebene byte-Array oder gar keines, wenns ein DirectBuffer ist. Speicher wird also nur einmal "verschwendet".
Das short-Array benötigst du ja auch nicht. Du liest und schreibst die Daten mittels der ShortBuffer-Methoden "get(int index)" und "put(int index)". Der unter dem ShortBuffer liegende ByteBuffer wird die Daten dann schon sorgenfrei korrekt in das byte-Array eintragen.
Was man nicht machen sollte ist allerdings es beim ByteBuffer zu belassen und get- bzw. putShort zu verwenden, sonst ist man ewig dabei, die Indices korrekt zu berechnen.
Alles in allem... Buffer sind im allgemeinen ebenso schnell wie normale Arrays und der händischen Berechnung der Datenreihenfolge und Indices. Kurz gesagt, Buffer sind die besseren Arrays.
[EDIT]...von wegen nicht ganz richtig... Absolut korrekt, müsste man sagen. Zumindest bei dem, wie es Kevin94 vorschlägt.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Screenshots machen und zwar viele und speichern Java Basics - Anfänger-Themen 12
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
S Hilfe : Unendlich viele Zufallszahlen erstellen? Java Basics - Anfänger-Themen 8
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
R Zu viele leere Parameter Java Basics - Anfänger-Themen 8
T Variablen Beliebig viele Arrays in Schleife erstellen Java Basics - Anfänger-Themen 1
M Aufgabe: Eine Klasse und viele Untermethoden Java Basics - Anfänger-Themen 30
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
D zu viele MySQL Connections Java Basics - Anfänger-Themen 18
F Threads ftp4j, viele Dateien upload Java Basics - Anfänger-Themen 5
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Beliebig viele Rechtecke erzeugen Java Basics - Anfänger-Themen 5
N Beliebig viele parameter Java Basics - Anfänger-Themen 3
D Viele grafische unterschiede von Windows xp zu Windows 7 Java Basics - Anfänger-Themen 3
T unterschiedlich viele parameter übergeben Java Basics - Anfänger-Themen 5
T Zu viele Fenster - HILFE! Java Basics - Anfänger-Themen 5
Prafy Beliebig viele Arrays erstellen? Java Basics - Anfänger-Themen 2
J Methoden Beliebig viele Objekt-Eingabeparameter im Konstruktor Java Basics - Anfänger-Themen 6
T viele "kleine" Fragen... Java Basics - Anfänger-Themen 3
M Zu viele Verkettungen von Klassen Java Basics - Anfänger-Themen 4
G Erste Schritte Wie viele Montage gab es? Java Basics - Anfänger-Themen 14
S Variablen viele Instanzvariablen vermeiden Java Basics - Anfänger-Themen 14
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
L buffered reader produziert zu viele und seltsame zeichen Java Basics - Anfänger-Themen 2
D Erste Schritte Viele Objekte einer Klasse "verwalten" Java Basics - Anfänger-Themen 17
T Beliebig viele Werte in Array zwischenspeichern Java Basics - Anfänger-Themen 15
S Viele Fragen von einem Anfänger in Java Java Basics - Anfänger-Themen 2
F Viele Controller-Klassen Java Basics - Anfänger-Themen 5
P Datentypen extrem viele Fehler nur irgendwie seh ich den Grund ned... Java Basics - Anfänger-Themen 3
M Viele GUI-Variablen Java Basics - Anfänger-Themen 4
O Wie kann man das einfach lösen? (dynamisch viele Attribute) Java Basics - Anfänger-Themen 6
U JTable viele möglichkeiten, keine Lösung Java Basics - Anfänger-Themen 5
H Reflexion: Eine Methode, beliebig viele Parameter (Java 1.4.2) Java Basics - Anfänger-Themen 8
M Viele verschachtelte Schleifen Java Basics - Anfänger-Themen 14
Avalarion Erschaffung eines Shadowrun Charaktergenerators - Viele, Viele Fragen! Java Basics - Anfänger-Themen 6
S Viele Konstanten, EnumSet? Java Basics - Anfänger-Themen 3
S Stilfrage: Neue Klasse wenn es in einer Klasse zu viele Methoden gibt? Java Basics - Anfänger-Themen 14
Kasu So viele "_ " ausgeben, wie ein String lang ist Java Basics - Anfänger-Themen 4
I viele Dateinamen in ein String-Array mit File().list() Java Basics - Anfänger-Themen 4
mwildam Textfile lesen und schreiben - so viele Möglichkeiten Java Basics - Anfänger-Themen 5
U Zu viele werte in einer klasse Java Basics - Anfänger-Themen 4
K Viele Fragen eines Anfängers-Fließkommazahlen/Typenwandlung Java Basics - Anfänger-Themen 5
W Viele Objekte mit einem Konstrukor erzeugen Java Basics - Anfänger-Themen 10
R einfaches Programm, viele Probleme Java Basics - Anfänger-Themen 29
G viele zahlen mit wenig code Java Basics - Anfänger-Themen 4
X 1 MySQL-Verbindung und viele Threads Java Basics - Anfänger-Themen 4
E Viele Fragen Java Basics - Anfänger-Themen 8
J viele Objekte erzeugen Java Basics - Anfänger-Themen 21
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
O viele Name mit jeweils zugehörigen Status in .txt Speichern Java Basics - Anfänger-Themen 16
K ResultSet: Wie viele Rows beinhaltet es? Java Basics - Anfänger-Themen 6
X Viele Komponenten automatisch erzeugen Java Basics - Anfänger-Themen 2
C zu viele paint()'s. Java Basics - Anfänger-Themen 6
M Viele Textfelder auslesen Java Basics - Anfänger-Themen 3
P x-viele Variablen anlegen Java Basics - Anfänger-Themen 2
F Mit der Zahl n n-viele Arrays erstellen ?! Java Basics - Anfänger-Themen 4
O Datentypen Volle 16 Bit eines Short für flags Abfrage nutzen Java Basics - Anfänger-Themen 11
F byte, short oder doch int? Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
S Performance von byte[], short[], int[]..? Java Basics - Anfänger-Themen 24
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
H Variablen short <-> byte[] Java Basics - Anfänger-Themen 15
R Erste Schritte Rechnenoperationen mit byte, short und char Java Basics - Anfänger-Themen 8
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
U short[] nach byte[] Java Basics - Anfänger-Themen 11
D Von short zu Ascii-Code Java Basics - Anfänger-Themen 2
O 64bit- OS byte, short, int oder long bzw. float oder double? Java Basics - Anfänger-Themen 13
F BufferedImage aus short[][][] Java Basics - Anfänger-Themen 3
E JAVA Typ Short mit String ergänzen Java Basics - Anfänger-Themen 6
H Typ short: Exponent und Modulo Java Basics - Anfänger-Themen 3
S Char Array Werte in short variablen speichern Java Basics - Anfänger-Themen 4
F Short Array zu String Java Basics - Anfänger-Themen 2
H short in unicode umwandeln Java Basics - Anfänger-Themen 5
Z Frage zu "short" Java Basics - Anfänger-Themen 6
M Aus einem Array von "bytes" ein "short" Java Basics - Anfänger-Themen 4
N Problem mit Datentyp short, byte Java Basics - Anfänger-Themen 2
S short in String umwandeln ? Java Basics - Anfänger-Themen 3
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben