Ich habe Vektor-Daten gespeichert, einmal als Text-Datei und einmal als Float-Array. Die Variante als Text-Datei geht ohne Probleme, nur währe es mir lieber, wen ich die Daten Binär speichern könnte. Die binäre Variante liesst zwar etwas aus, aber die Daten sind fehlerhaft, somit wir die Datei erkannte.
Gespeichert werden die Daten mit Lazarus(Pascal), ich habe es dort versuchsweise auch eingelesen, um dort Fehler auszuschliessen.
Code:
privatefloat[] ReadVectorTxt(String Datei){// Liest Daten als Text.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Big-Endian ist historisch die Network Byte Order, welche bei den meisten binären Kommunikationsprotokollen verwendet wird. In der Praxis gibt es, für den Anwender, nur noch sehr wenige Systeme, die Big-Endian sind. Einige MIPS-Systeme gehören dazu (FRITZ!Boxen z.B.), was einem immer wieder auf die Füße fallen kann, sobald man Binärdaten über einen Draht irgendeiner Art von A nach B schiebt.
Fun Fact: Big-Endian ist eigentlich die „richtige“ Reihenfolge, wenn man sich mal so anschaut, wie wir gelehrt wurden, Zahlen zu lesen: Da steht die signifikanteste Ziffer auch am weitersten links (1000 ist größer als 0001). Bei Little-Endian steht die rechts.
grüße, Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Fun Fact: Big-Endian ist eigentlich die „richtige“ Reihenfolge, wenn man sich mal so anschaut, wie wir gelehrt wurden, Zahlen zu lesen: Da steht die signifikanteste Ziffer auch am weitersten links (1000 ist größer als 0001). Bei Little-Endian steht die rechts.
Mit dem habe ich mich bis jetzt nie befasst, aber du hast recht, der PC speichert die Daten verkehrt herum.
Aber es ist irgendwie blöd, das Java die Daten anderst speichert als wie sie ins RAM kommen, somit muss beim laden/speicher immer die Reihenfolge geändert werden.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Lord Horazont hat geschrieben:
Big-Endian ist historisch die Network Byte Order, welche bei den meisten binären Kommunikationsprotokollen verwendet wird. In der Praxis gibt es, für den Anwender, nur noch sehr wenige Systeme, die Big-Endian sind.
Du meinst außer gewisse Software Produkte? [edit] Ah, Mathias hats schon geschrieben
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
yunharla hat geschrieben:
Lord Horazont hat geschrieben:
Big-Endian ist historisch die Network Byte Order, welche bei den meisten binären Kommunikationsprotokollen verwendet wird. In der Praxis gibt es, für den Anwender, nur noch sehr wenige Systeme, die Big-Endian sind.
Du meinst außer gewisse Software Produkte?
Mit „Systemen“ meinte ich ausschließlich Hardwareplattformen. Dass Big Endian in Protokollen und ähnlichem noch gängig ist, kann man leider nicht bestreiten.
Wenn eine Softwareplattform sich für eine der Dinge entscheidet ist das aber sehr gut, weil es die Portabilität verbessert. So können die von der JVM gelesenen und geschriebenen Binärdaten auf allen Systemen auch wieder gelesen werden – bei FP muss man sich da extra gedanken machen, damit das geht.
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Ich habe meine Lade-Routine für Float-Array ein bisschen abgeändert. Beim alten Code, habe ich den ersten Float in der Array als Arraylängenangabe missbraucht.
Neu lese ich die Länge mit DataInputStream.available() aus.
Ist dies zulässig, oder können da Fehler auftreten ?
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Nein das ist komplett Falsch. Streams sind meistens für asynchrone Prozesse gedacht. Sprich, der Wert von "available" muss nicht unbedingt die komplette Länge sein. Soweit ich weiß hat Java aber Wrapper Methoden um ein Byte-Array, bis zum Streamende, auszulesen und zu vergrößern (wahrscheinlich so etwas wie ReadToEnd oder so). Das kannst du dann nehmen und durch irgendeine Marshal-Funktion dann zum Float-Array Konvertieren.
Du würdest also nicht nur Code-Sparen sondern kannst auch gleich so etwas wie HTTP-Downloads oder Benutzereingaben behandeln.
Allerdings blockiert das deinen Nachfolgenden Code und braucht ggf. sehr/zu viel Arbeitsspeicher. Halt je nachdem wie groß die Datei/Download oder was-auch-immer ist.
Oder kann ich wenigsten irgendwie die Grösse der Datei ermitteln ? Bei einer Datei eines öffentlichen Ornder kann ich die Grösse mit folgendem Code ermitteln.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.