2016-01-29 10 views
5

Ich arbeite mit Nachrichten, die ein paar Attribute und ein Array von tausend Fließkommawerten (double []) enthalten. Wenn die Nachrichten mit Protokollpuffern serialisiert werden, werden dank der "packed = true" -Direktive die doppelten Werte in den Nachrichten kompakt ausgerichtet und gespeichert.Protokollpuffer in Java: Können wir effizient mit primitiven Arrays umgehen?

Aber die Java-Klassen, die für diese Nachricht generiert werden, stellen das Doppel-Array als Array-Liste (!) Dar, wobei primitive Doppelwerte in Objekte eingeordnet werden und diese Objekte im Speicher gestreut werden, während am Ende die doppelte [] -Darstellung benötigt wird für weitere Aggregationen ...

Gibt es eine Option zum Generieren von Klassen, die wiederholte primitive Werte als primitive Java-Arrays behandeln?

Antwort

0

Nach der Diskussion dieses Themas an mehreren Stellen ist die Antwort eine klare no.

Mit Protokollpuffern ist die Binärdarstellung für Vektoren von Zahlen effizient. Aber es ist derzeit mit der Java-Implementierung nicht möglich, diese Vektoren effizient zu deserialisieren (statt primitiver Arrays erhalten Sie Sammlungen von eingerahmten Zahlen ...)

0

Wie erklärt here, was benötigt wird, ist Versionen von ArrayList, die ungeboxte Werte speichern. Da Java-Generics nur mit Objekten (Boxed-Typen) arbeiten, sollte für jeden Primitivtyp eine Implementierung benötigt werden. Sie können also die von Apache Commons Primitives zur Verfügung gestellte verwenden.

Verwandte Themen