Public Member Functions | |
EqStruct () | |
Erzeugt ein Objekt mit einer Speichergröße von 128 Bytes für zu lesende Daten. | |
EqStruct (int arraySize) | |
Erzeugt ein Objekt mit der angegebenen Speichergröße für zu lesende Daten. | |
byte | readByte () throws IOException |
Liest ein Byte aus dem Input-Stream. | |
void | writeByte (byte b) throws IOException |
Schreibt ein Byte in den Output-Stream. | |
short | readShort () throws IOException |
Liest einen Short aus dem Input-Stream. | |
void | writeShort (short s) throws IOException |
Schreibt einen Short in den Output-Stream. | |
int | readInt () throws IOException |
Liest einen Integer aus dem Input-Stream. | |
void | writeInt (int i) throws IOException |
Schreibt einen Integer in den Output-Stream. | |
float | readFloat () throws IOException |
Liest einen Float (IEEE-Format) aus dem Input-Stream. | |
void | writeFloat (float f) throws IOException |
Schreibt einen Float in den Output-Stream. | |
float | readRealF () throws IOException |
Liest einen F_Floating (OpenVMS-Format) aus dem Input-Stream, konvertiert ihn in IEEE-Format (Java) und gibt diesen Wert zurück. | |
void | writeRealF (float f, boolean swap) throws IOException |
Konvertiert ein IEEE-Float (Java) in ein F_Floating (OpenVMS-Format) und schreibt diesen Wert in den Output-Stream. | |
String | readString () throws IOException |
Liest einen String aus dem Input-Stream. | |
String | readString (int len) throws IOException |
Liest einen String der angegebenen Länge aus dem Input-Stream. | |
void | writeString (String s) throws IOException |
Schreibt einen String in den Output-Stream. | |
EqData | toEqData () |
Gibt eine Referenz auf das interne EqData-Objekt zurück. | |
void | reset () |
Setzt den Input- und Output-Stream auf den Ausgangszustand zurück. | |
void | close () throws IOException |
Schließt den Input- und Output-Stream. |
EqStruct hält die Daten intern in einem EqData-Objekt des Typs UFS_DT_Integer8. Dieses wird mittels eines ByteArrayOutputStream
beschrieben bzw. mittels eines ByteArrayInputStream
gelesen. In diesen Stream muss geschrieben bzw. aus diesem Stream muss gelesen werden, genau in der Reihenfolge, wie die Struktur es erfordert. Beim Schreiben wird die Größe des Arrays automatisch angepasst. Beim Lesen muss das Array die entsprechende Kapazität haben.
Angenommen, man hat eine Struktur, die in C wie folgt definiert ist
typedef struct { int i; // 32 bits char c; // 8 bits float f; // 32 bits } myStruct;dann kann man deren Elemente in Java folgendermaßen lesenUfClnt uf = new UfClnt(); EqStruct eq = new EqStruct(); UsrCompl cmpl = new UsrCompl();
uf.access("NOM", "PROP", "R", 0, null, eq.toEqData(), cmpl);
int i = eq.readInt(); // als erstes den Integer-, ... byte b = eq.readByte(); // ... dann den Byte- ... float f = eq.readFloat(); // ... und zum Schluss den Float-Wertwobei auf die genaue Reihenfolge zu achten ist. Der Schreibzugriff funktioniert entsprechend:eq.reset(); eq.writeInt(4711); eq.writeByte(37); eq.writeFloat(17.04F);
uf.access("NOM", "PROP", "W", 0, null, eq.toEqData(), cmpl);ACHTUNG! Properties von Geräten auf VME-Ebene mit Parametern oder Daten vom SIS-Datentyp UFS_DT_Structure, die Float-Werte enthalten, erwarten bzw. senden diese Float-Werte im OpenVMS-Format F_Floating. In diesem Fall muss man statt
readFloat
undwriteFloat
die MethodenreadRealF
undwriteRealF
benutzen. Bei unterschiedlicher Endianität der kommunizierenden Maschinen müssen die einzelnen Elemente in der zu sendenden Struktur außerdem noch geswapt werden. Der Swap beim Empfang funktioniert automatisch.Auf eine Lese-Property mit obigen Daten und den Parametern
typedef struct { int i; // 32 bits float f; // 32 bits } myPara;würde man unter OpenVMS wie folgt zugreifen:EqStruct para = new EqStruct(); EqStruct data = new EqStruct();
para.writeInt(Swap.swapInt(42)); para.writeRealF(47.11f, true); // true => swap
uf.access("NOM", "PROP", "R", 0, para.toEqData(), data.toEqData(), cmpl);
int i = eq.readInt(); byte b = eq.readByte(); float f = eq.readRealF(); // im Gegensatz zu oben
UfsDataTypes
ByteArrayOutputStream
ByteArrayInputStream
|
Erzeugt ein Objekt mit einer Speichergröße von 128 Bytes für zu lesende Daten.
|
|
Erzeugt ein Objekt mit der angegebenen Speichergröße für zu lesende Daten.
|
|
Schließt den Input- und Output-Stream.
|
|
Liest ein Byte aus dem Input-Stream.
|
|
Liest einen Float (IEEE-Format) aus dem Input-Stream.
|
|
Liest einen Integer aus dem Input-Stream.
|
|
Liest einen F_Floating (OpenVMS-Format) aus dem Input-Stream, konvertiert ihn in IEEE-Format (Java) und gibt diesen Wert zurück. Die Methode wird benötigt, da beim SIS-Datentyp UFS_DT_Structure keine Möglichkeit besteht, Konvertierungen automatisch von einem UFC-Client oder vom UFC-Server durchführen zu lassen. Das muss der Anwender selbst tun, indem er diese Methode in seinem Code benutzt. |
|
Liest einen Short aus dem Input-Stream.
|
|
Liest einen String der angegebenen Länge aus dem Input-Stream.
|
|
Liest einen String aus dem Input-Stream.
|
|
Setzt den Input- und Output-Stream auf den Ausgangszustand zurück. Eventuell noch vorhandene Daten gehen verloren. |
|
Gibt eine Referenz auf das interne EqData-Objekt zurück.
Diese kann
|
|
Schreibt ein Byte in den Output-Stream.
|
|
Schreibt einen Float in den Output-Stream.
|
|
Schreibt einen Integer in den Output-Stream.
|
|
Konvertiert ein IEEE-Float (Java) in ein F_Floating (OpenVMS-Format) und schreibt diesen Wert in den Output-Stream. Falls angegeben (swap == true), wird noch ein Swap ausgeführt. Die Methode wird benötigt, da beim SIS-Datentyp UFS_DT_Structure keine Möglichkeit besteht, Konvertierungen automatisch von einem UFC-Client oder vom UFC-Server durchführen zu lassen. Das muss der Anwender selbst tun, indem er diese Methode in seinem Code benutzt. Ein Swap ist notwendig, wenn Client und Server auf Maschinen mit unterschiedlicher Endianität laufen.
|
|
Schreibt einen Short in den Output-Stream.
|
|
Schreibt einen String in den Output-Stream.
|