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
 

Chaosengel_Gabriel

Erfahrenes Mitglied
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 ^^
 

Hoschi01

Grünschnabel
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?
 

zeja

Erfahrenes Mitglied
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.
 

Hoschi01

Grünschnabel
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
 

Hoschi01

Grünschnabel
fin.available() liefert mir dies zurueck. Bei Dateien kleiner 4 GB kommt bei Windows auch 21... zurueck und somit funktioniert es dann auch.
 

zeja

Erfahrenes Mitglied
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.
 

Hoschi01

Grünschnabel
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.