2009-07-03 1 views
0

Ich habe eine Corba related Frage.Corba Sequenz <octet> viel langsamer als mit einem Sockel

In meiner Java App verwende ich typedef Sequenz Data;

Jetzt spielte ich mit diesem Datenvektor herum. Wenn ich mit der Corba-Spezifikation richtig bin Sequenz wird entweder in xs: base64Binary oder xs: hexBinary umgewandelt werden. Es sollte ein undurchsichtiger Typ sein und daher sollte kein Marshalling verwendet werden.

Ich habe versucht, verschiedene IDL-Stile:

void Get(out Data d); 
Data Get(); 

aber was ich sehe, ist, dass die Daten zu bewegen mit Corba viel langsamer als eine Buchse direkt mit ist. Mir geht es gut mit ein wenig Overhead, aber es sieht für mich aus, als ob die Daten noch gemarshallt sind.

Muss ich irgendwie meine Kugel konfigurieren, um das Marshalling zu unterdrücken oder habe ich etwas vermisst.

Antwort

1

1) Nein, es ist nicht nötig, etwas zu konfigurieren. 2) Sie haben nichts verpasst.

Da CORBA alles marshallt, wird auch eine Oktettfolge marshallt. Es wird immer so angeordnet wie es ist (als Byte-Sequenz). Marshalling bedeutet nicht, dass es sich irgendwie ändern muss. Die CDR-Codierung wird jedes Mal für die Objektserialisierung verwendet. Dieser Vorgang wird als Marshalling bezeichnet.

Btw verwenden Sie SUNs Java-Orb oder JacORB? Da jeder ORB andere oder zusätzliche Eigenschafteneinstellungen haben kann. (Aber es sollte nicht haben ...)

octect Definition re CORBA 3.0.3 spec. „Werte für ein Oktett Konstante außerhalb des Bereichs von 0 bis 255 wird ein Fehler bei der Kompilierung verursachen [... ] Der Oktett-Typ ist eine 8-Bit-Menge, die garantiert keine Umwandlung erfährt, wenn sie vom Kommunikationssystem übertragen wird. "

Edits in kursiv

+0

Sonnen Java Orb. Ist es wichtig? – Totonga

+0

Gibt es eine Möglichkeit festzustellen, ob Base64 oder Hex ausgewählt ist. – Totonga

+0

Also fragte ich die CORBA-Spezifikation und es heißt, dass "Werte für eine Oktett-Konstante außerhalb des Bereichs 0 - 255 einen Kompilierungsfehler verursachen". Oktett ist also immer ein Byte. Nur für Zeichen Base64/utf-8/-16 ist möglich. Ein Oktett hat also in jedem Fall eine Größe von einem Byte. – tuergeist

Verwandte Themen