Guten Morgen zusammen,
nachdem ich seit ca. 8 Jahren mit Delphi unterwegs war, habe ich micht entschieden, mich nun auch intensiver mit Java zu beschäftigen.
Es geht um Folgendes:
Zusammen mit einem Bekannten habe ich ein Programm "B" entwickelt, das als Zusatzmodul zu einem weiteren Programm "A" dient. B liest dabei die Dateien, die vorher von A geschrieben wurden.
(Hintergrund: A ist ein Programm zur Auswertung von Schwimm-Wettkämpfen und B dient als Schnittstelle von/zu elektonischen Zeitmessanlagen.)
Beide Programme wurden in Delphi entwickelt (A Delphi 1, B Delphi 7). Ein Großteil der Dateien besteht dabei aus Delphi-Records ("packed records" in Delphi 7).
Bsp:
Bisher war es für uns natürlich kein Problem, diese Daten wieder auszulesen. Nun möchten wir aber Programm B auf Java umstellen (während A - zunächst - Delphi bleibt.
Meine Frage ist nun:
Gibt es eine Möglichkeit, diese Daten in eine entsprechende Java-Klasse einzulesen, ohne die Datei byte-/zeichenweise auszulesen?
Ich habe mich bereits in Richtung Serialisierung von Objekten umgeschaut, bin da aber recht schnell gebremst worden, da die Klassen (ich habe ObjectInputStream verwendet) wohl neben den Feldern auch eine Kennzeichnung der Klasse im Stream erwarten.
Ich erhalte bei meinem Versuch also eine Exception "java.io.StreamCorruptedException: invalid stream header".
[highlight=Java]
import java.io.*;
import java.io.IOException;
public class TempLoader {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ObjectInputStream f = new ObjectInputStream(new FileInputStream("G:/CPS/[url="[URL]http://SCWIMM.CPS/VERAN/TW_AUTOM/NAMEN.DAT[/URL]"][URL="http://SCWIMM.CPS/VERAN/TW_AUTOM/NAMEN.DAT"]SCWIMM.CPS/VERAN/TW_AUTOM/NAMEN.DAT[/url][/url]"));
Temp t = (Temp) f.readObject();
t.test();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[/highlight]
Gibt es vielleicht eine Klasse, die das, was ich möchte, kann?
Oder bewahrheitet sich eher meine Befürchtung, dass Java beim Einlesen von Objekten immer eine Kennzeichnung benötigt, welches Feld nun gelesen wird und dass die Reihenfolge/Typen der Felder alleine nicht ausreicht.
Mit der Hoffnung einen regelkonformen, ersten Einstieg in dieses Forum gefunden zu haben, verbleibe ich
mit freundlichen Grüßen
Markus Patt
PS:
Bitte keine Kritik zum Stil dieses Codeschnipsels. Ich kann auch "schön".
nachdem ich seit ca. 8 Jahren mit Delphi unterwegs war, habe ich micht entschieden, mich nun auch intensiver mit Java zu beschäftigen.
Es geht um Folgendes:
Zusammen mit einem Bekannten habe ich ein Programm "B" entwickelt, das als Zusatzmodul zu einem weiteren Programm "A" dient. B liest dabei die Dateien, die vorher von A geschrieben wurden.
(Hintergrund: A ist ein Programm zur Auswertung von Schwimm-Wettkämpfen und B dient als Schnittstelle von/zu elektonischen Zeitmessanlagen.)
Beide Programme wurden in Delphi entwickelt (A Delphi 1, B Delphi 7). Ein Großteil der Dateien besteht dabei aus Delphi-Records ("packed records" in Delphi 7).
Bsp:
Code:
TNamensatz = packed record
SatzNr : Word;
Verein : Word;
Familienname,
Vorname,
WkPass : string[25];
Jahrgang : string[4];
Geschlecht : Char;
ArchivNr : Word;
RangCup : array [1..5] of Boolean;
Abmeldung : Boolean;
keinePunkte : Boolean;
Handicap : array [0..5] of Byte;
IDNr : string[5];
NamenZusatz : string[10];
end;
Meine Frage ist nun:
Gibt es eine Möglichkeit, diese Daten in eine entsprechende Java-Klasse einzulesen, ohne die Datei byte-/zeichenweise auszulesen?
Ich habe mich bereits in Richtung Serialisierung von Objekten umgeschaut, bin da aber recht schnell gebremst worden, da die Klassen (ich habe ObjectInputStream verwendet) wohl neben den Feldern auch eine Kennzeichnung der Klasse im Stream erwarten.
Ich erhalte bei meinem Versuch also eine Exception "java.io.StreamCorruptedException: invalid stream header".
[highlight=Java]
import java.io.*;
import java.io.IOException;
public class TempLoader {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ObjectInputStream f = new ObjectInputStream(new FileInputStream("G:/CPS/[url="[URL]http://SCWIMM.CPS/VERAN/TW_AUTOM/NAMEN.DAT[/URL]"][URL="http://SCWIMM.CPS/VERAN/TW_AUTOM/NAMEN.DAT"]SCWIMM.CPS/VERAN/TW_AUTOM/NAMEN.DAT[/url][/url]"));
Temp t = (Temp) f.readObject();
t.test();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
[/highlight]
Gibt es vielleicht eine Klasse, die das, was ich möchte, kann?
Oder bewahrheitet sich eher meine Befürchtung, dass Java beim Einlesen von Objekten immer eine Kennzeichnung benötigt, welches Feld nun gelesen wird und dass die Reihenfolge/Typen der Felder alleine nicht ausreicht.
Mit der Hoffnung einen regelkonformen, ersten Einstieg in dieses Forum gefunden zu haben, verbleibe ich
mit freundlichen Grüßen
Markus Patt
PS:
Bitte keine Kritik zum Stil dieses Codeschnipsels. Ich kann auch "schön".