BinaryStream
Hallo!
Ich bräuchte hilfe und zwar weiß ich nicht wie ich den BinaryStream effektiv schreibe (damit ich dann genau angeben kann das er nur die letzten 4 Zeichen ausgibt) weil ich ja schon eine main habe und so wie ich den Konstruktor geschrieben habe nicht geht.
Vielleicht kann man das gleich direkt hineinschreiben in die void countPIM, hab da leider nicht viel Ahnung gerade.
Es handelt sich um diese Datei hier:
http://imarkus.net/EmbCheck_original.java
So sollte es eigentlich funktionieren und ist auch keine große Sache denke ich aber leider komm ich trotzdem nicht weiter und brauch eure hilfe
Danke!
Ich bräuchte hilfe und zwar weiß ich nicht wie ich den BinaryStream effektiv schreibe (damit ich dann genau angeben kann das er nur die letzten 4 Zeichen ausgibt) weil ich ja schon eine main habe und so wie ich den Konstruktor geschrieben habe nicht geht.
Vielleicht kann man das gleich direkt hineinschreiben in die void countPIM, hab da leider nicht viel Ahnung gerade.
Es handelt sich um diese Datei hier:
http://imarkus.net/EmbCheck_original.java
|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(PINFile);
out = new FileOutputStream(MSGCODE);
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
|
So sollte es eigentlich funktionieren und ist auch keine große Sache denke ich aber leider komm ich trotzdem nicht weiter und brauch eure hilfe
Danke!
Der Datentyp int kann auch negative werte beinhalten.
So kann es durchaus sein das in der Mitte der Datei ein zeichen mit -1 kodiert ist.
laut deiner Programmlogik beendet er dann aber lesen und schreiben.
Also anstatt
musst du
schreiben.
PS: Dadurch das du Exceptions ignorierst sind sie nicht weg.
Noch ein Hinweis: die Read-Methode gibt keine Bytes zurück, sondern ein Integer.
Ein integer ist so groß wie etwa 4 Bytes.
Das wusstest du warscheinlich schon, aber ich habe mich gewundert warum du die Klasse "CopyBytes" anstatt "CopyChars" oder "Copy4ByteBlocks" nennst.
So kann es durchaus sein das in der Mitte der Datei ein zeichen mit -1 kodiert ist.
laut deiner Programmlogik beendet er dann aber lesen und schreiben.
Also anstatt
|
|
Java-Quelltext |
1 |
while ((c = in.read()) != -1) { |
musst du
|
|
Java-Quelltext |
1 |
while (in.available()>0) { |
schreiben.
PS: Dadurch das du Exceptions ignorierst sind sie nicht weg.

Noch ein Hinweis: die Read-Methode gibt keine Bytes zurück, sondern ein Integer.
Ein integer ist so groß wie etwa 4 Bytes.
Das wusstest du warscheinlich schon, aber ich habe mich gewundert warum du die Klasse "CopyBytes" anstatt "CopyChars" oder "Copy4ByteBlocks" nennst.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »nocturne« (13. August 2009, 12:58)
Das ist ja eben das Problem.
Er gibt mir normal aus (immer die letzten 4 Zeichen '0021') und dann kommt plötzlich eine Zeile wo Steuerzeichen etc drinnen sind (er intepretiert automatisch) und dann haut es ihn raus und gibt dann sowas raus "710105001682072349 => null || Message: null".
Deswegen hab ich mir gedacht ich muss es mit einem BinärenStream einlesen und dann genausagen, dass er nur die letzten 4 Zeichen nehmen soll, nur bekomm ich es einfach nicht hin, indem ich den Konstruktor erstelle und dann einfach die Methode aufrufe.
Kannst du mir das vielleicht in meinen Code fertig reinschreiben? Ich zuck da sonst aus, weil es einfach ned will und nur Fehler beim kompilieren zurückgibt bei so etwas simplen..
Er gibt mir normal aus (immer die letzten 4 Zeichen '0021') und dann kommt plötzlich eine Zeile wo Steuerzeichen etc drinnen sind (er intepretiert automatisch) und dann haut es ihn raus und gibt dann sowas raus "710105001682072349 => null || Message: null".
Deswegen hab ich mir gedacht ich muss es mit einem BinärenStream einlesen und dann genausagen, dass er nur die letzten 4 Zeichen nehmen soll, nur bekomm ich es einfach nicht hin, indem ich den Konstruktor erstelle und dann einfach die Methode aufrufe.
Kannst du mir das vielleicht in meinen Code fertig reinschreiben? Ich zuck da sonst aus, weil es einfach ned will und nur Fehler beim kompilieren zurückgibt bei so etwas simplen..
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Super_Frettchen« (13. August 2009, 12:57)
Zum Verständniss:
Du willst von einer Datei die letzten 4 BYTE in eine andere Datei kopieren?
Du willst von einer Datei die letzten 4 BYTE in eine andere Datei kopieren?
|
|
Java-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("c:/langertext.txt"); fis.read(new byte[fis.available() - 4]); byte[] letzten4 = new byte[4]; fis.read(letzten4); fis.close(); FileOutputStream fos = new FileOutputStream("c:/test.txt"); fos.write(letzten4); fos.close(); } catch (Exception e) { e.printStackTrace(); } } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »nocturne« (13. August 2009, 13:10)
Nun ja, ich ruf das Script in der Konsole etc auf und er liest aus einer Datei aus die so ca. aussieht:
Und so wie ich es jetzt programmiert habe, haut es ihn dann auf weil irgendein Steuerzeichen dazwischen ist oder so. Deswegen hab ich mir gedacht ich les das jezt per Binär ein, damit er es nicht interpretiert und sag ihm, das er eben genau die 4 letzten zeichen (Fett im Beispiel) nehmen soll.
PS:Eingelesen wird eben mit dem PIMCode und der richtige "wert" soll dann an MSGCODE, der am ende eben ausgegeben wird.
Hier die dazugehörige Card.java -> http://imarkus.net/Card.java
Wenn ich die Datei ausführe, sieht die Ausgabe so aus: http://imarkus.net/ausgabe.txt
Und so sieht zB die Datei aus die ich einlese: http://imarkus.net/eingabe.txt
Zitat
310000000757A1051RTX 2710105001682072349 000010000 000000000000000710105001682049651 ¼wo÷]pÀ˜ÿÿÿÿ
450000000757710105001682072349 0WABERER'S INTERNATIONAL Zrt. KTC-841Nagykõrösi út 351. HUN1239 BUDAPEST HUN05
810000000757A2710105001682072349 4950 0000000 Ó20«Œýèÿÿÿÿ 200908051310470021
91000000075705
110000000758
310000000758A1051RTX 2710105001682072356 000010000 000000000000000710105001682049669 ºÿÉúB}Öÿÿÿÿ
450000000758710105001682072356 0WABERER'S INTERNATIONAL Zrt. KTC-842Nagykõrösi út 351. HUN1239 BUDAPEST HUN05
810000000758A2710105001682072356 5332 0000000—ÄÈrÞiÞ—ÿÿÿÿ 200908051310470021
Und so wie ich es jetzt programmiert habe, haut es ihn dann auf weil irgendein Steuerzeichen dazwischen ist oder so. Deswegen hab ich mir gedacht ich les das jezt per Binär ein, damit er es nicht interpretiert und sag ihm, das er eben genau die 4 letzten zeichen (Fett im Beispiel) nehmen soll.
PS:Eingelesen wird eben mit dem PIMCode und der richtige "wert" soll dann an MSGCODE, der am ende eben ausgegeben wird.
Hier die dazugehörige Card.java -> http://imarkus.net/Card.java
Wenn ich die Datei ausführe, sieht die Ausgabe so aus: http://imarkus.net/ausgabe.txt
Und so sieht zB die Datei aus die ich einlese: http://imarkus.net/eingabe.txt
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Super_Frettchen« (13. August 2009, 13:55)
Mach das mal so:
Das ist eine UTF-16-Datei,
das bedeutet das du sie auch so lesen must.
Den Rest solltest du jetzt selber können.
PS: Binär und Digital bedeuten haargenau das selbe; Sprich: Binär einlesen tust du immer!
Das ist eine UTF-16-Datei,
das bedeutet das du sie auch so lesen must.
|
|
Java-Quelltext |
1 |
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:/test"), Charset.forName("UTF-16"))); |
Den Rest solltest du jetzt selber können.
PS: Binär und Digital bedeuten haargenau das selbe; Sprich: Binär einlesen tust du immer!
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »nocturne« (13. August 2009, 14:41)
Tut mir leid, Script war einfach nur blöd formuliert. Ich kompilier die datei einfach und ruf sie auf, kein script.
Soweit funzt das Programm eh, er liest mir die letzten 4 Zahlen raus (0021) und gibt sie dann aus. Nur hängt er sich dann auf weil ein zeichen drinnen ist, dass er nicht kennt und sagt "tschüss, ich will nimmer".
und meine idee war, die datei binär einzulesen (damit er nicht mehr selber interpretiert) und dann sage, dass er eben diese 4 zhlen nehmen soll
Aber ich warte mal was du schreibst
Soweit funzt das Programm eh, er liest mir die letzten 4 Zahlen raus (0021) und gibt sie dann aus. Nur hängt er sich dann auf weil ein zeichen drinnen ist, dass er nicht kennt und sagt "tschüss, ich will nimmer".
und meine idee war, die datei binär einzulesen (damit er nicht mehr selber interpretiert) und dann sage, dass er eben diese 4 zhlen nehmen soll
Aber ich warte mal was du schreibst


