FileInputStream bei Dateien > 4GB funktioniert unter Windows nicht

Hoschi01

Grünschnabel
Hallo zusammen,
Ich habe ein Programm, welches mir zu einer bestehenden Datei eine MD5 checksumme zurueck gibt. Dies laeuft auch einwandfrei unter Solaris. Leider kann es unter Windows keine korrekte Checksumme fuer Dateien > 4GB angeben. Hier der Ausschnitt, der nicht passt:
FileInputStream fin = new FileInputStream("datei");
fin.available(); -> liefert eine falsche Laenge zurueck.

Kann mir irgendjemand bei diesem Thema helfen? Ich bin leider nicht weitergekommen.
Danke und Gruesse,
Hoschi01
 
Also ich bin kein Spezie in dem Bereich, aber ich glaube es liegt am Windows selbst...
Das da so große Daten Mengen nicht richtig behandelt werden...

Kann aber uach sein, dass ich mir irre ^^
 
Ja, das ist auch meine Befuerchtung. Gibt es denn keinen Workaround fuer sowas? Mit einem C-Programm kann ich das ganze ansprechen. Da habe ich eine CRC checksumme.
JDK fuer 64Bit Windows?
 
Available gibt ja auch nicht die Dateigröße zurück sondern die Anzahl von bytes die aktuell gelesen werden kann.

Über file.length() kannst du die Länge einer Datei bekommen.
 
Hi zeja,
Stimmt. Das habe ich eben auch gerade rausgefunden. Das Problem ist, dass die Bytes, die gelesen werden koennen nicht richtig rueber kommen. Bei Unix kommen 21.... Bytes und bei Windows 118... zurueck. D.h. die Datei wird als zu klein eingelesen.
Thx und Gruesse,
Hoschi01
 
fin.available() liefert mir dies zurueck. Bei Dateien kleiner 4 GB kommt bei Windows auch 21... zurueck und somit funktioniert es dann auch.
 
Available hat doch überhaupt nichts damit zu tun ob die Datei korrekt gelesen wird oder nicht. In einem Stream liegt immer nur ein Teil der Datei bereit und das sind die Anzahl von bytes die du mit available bekommst. Wenn du weiter liest, liest der Stream auch wieder neue Daten von der Datei ein.... so gehts weiter bis zu Ende.

Also an einem available festzumachen dass etwas nicht gehen soll ist einfach nicht richtig.
 
Ja, das glaube ich ja. Wie komme ich denn dann weiter? Der liest die Bytes dann ein und zaehlt runter. D.h. 11... und bei naechsten 11.. minus das, was bereits gelesen wuerde,
usw. Aber leider geht er nicht bis zum Ende der Datei durch.
 
Zurück