CRC wert berechnen ergibt 0 ?

Status
Nicht offen für weitere Antworten.
S

Strippenzieher

Gast
Hallo,

habe diese methode geschrieben:

Code:
public void calculateCheckSum(String file)
	{
		FileInputStream fis = null;
		CheckedInputStream cis = null;
		CRC32 crc = null;
		
		try
		{
			fis = new FileInputStream(file);
			crc = new CRC32();
			cis = new CheckedInputStream(fis, crc);			
			long checksum = cis.getChecksum().getValue();			
			System.out.println("Checksum: " + checksum + " Filename: " + file);
		}
		catch (Exception e)
		{
			System.out.println("File  Not found ");
		}
	}

Beispiel der Konsolenausgabe:

Code:
Checksum: 0 Filename: C:\test\test.dat

Warum ergibt die checksumme immer 0 ?
 

Murray

Top Contributor
Weil aus dem Stream noch nichts gelesen worden ist; die Prüfsumme wird nur über die gelesenen Bytes gebildet.
 
S

Strippenzieher

Gast
Murray hat gesagt.:
Weil aus dem Stream noch nichts gelesen worden ist; die Prüfsumme wird nur über die gelesenen Bytes gebildet.

für die es interessiert, damit funktionierte eine CRC-summenbildung für 1 Datei:

Code:
public void calculateCheckSum(String filename)
	{
		CheckedInputStream check;
		long checksum = 0;
		try
		{
			FileInputStream file = new FileInputStream(filename);
			check = new CheckedInputStream(file, new CRC32());
			BufferedInputStream in = new BufferedInputStream(check);			
			
				while (in.read() != -1)
				{
					 checksum = check.getChecksum().getValue();
				}
		}
		catch (FileNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("Checksum is " + checksum);
	}
 
S

Strippenzieher

Gast
Verjigorm hat gesagt.:
Ich würde mal behaupten, die Ausgabe liefert nur die Checksumme für das letzte eingelesene Byte.

weil read() byteweise liest

ausserdem hat CheckedInputStream ja auch ne Methode read()

edit:
http://www.galileocomputing.de/open...13_011.htm#mj2a3e65b2e945b3afdcec65217ee368be

was ich nicht ganz verstehe ist, ich habe ja eine Datei die z.B. 10000 Byte oder auch 10,50 oder 500 mb sein kann. Einfach mal angenommen... Ich wille EINE checksumme für EINE Datei und nicht eine Checksumme für EIN BYTE und das ganze wird dann 10000 mal durchlaufen und berechnet. Das verstehe ich net...
 
S

Strippenzieher

Gast
hab nochmal meinen code mit der javainsel verglichen:

mein code macht genau dasselbe... und ob ich crc.getValue() in der while oder außerhalb mache ist schnuppe, ich komme auf die gleichen werte bei gleicher datei?

Code:
InputStream in = CRC32Demo.class.getResourceAsStream( "/lyrics.txt" ); 
try 
{ 
  CRC32 crc = new CRC32(); 
  InputStream cis = new CheckedInputStream( in, crc ); 
 
  while ( cis.read() != –1 ) { /* Bis Ende lesen. */ } 
 
  System.out.printf( "%X", crc.getValue() );          // F9A39CFC 
} 
catch ( IOException e ) { 
  e.printStackTrace(); 
} 
finally { 
  try { in.close(); } catch ( Exception e ) { } 
}
 

Murray

Top Contributor
Ich bin mir nicht sicher, ob ich Dein Frage richtig verstehe, aber tatsächlich dürfte es - zumindest was das Ergebnis angeht; die Performance steht auf einem anderen Blatt - egal sein, ob Du in der Schleife nach jedem gelesenen Byte die Prüfsumme neu ermittelst, oder ob Du das nur einmal am Ende machst; das Ergebnis im letzen Schleifendurchlauf ist identisch mit dem nach der Schleife.
 
S

Strippenzieher

Gast
Murray hat gesagt.:
Ich bin mir nicht sicher, ob ich Dein Frage richtig verstehe

code ist aus google: ich frage mich z.B. warum wird hier für das byte array buf 1024 bytes reserviert? warum nicht 100 oder 128 wie man es sonst im google findet in den unzähligen Beispielen. Sollte man nicht die Länge der Datei feststellen bzw. die ganze Datei einlesen in einer schleife z.B. und danach wie untenstehend den CRC EINMAL auslesen?



Code:
public static long computeChecksumForFile(File file) throws IOException
{
byte[] buf = new byte[1024];
int bytesRead;
FileInputStream fis = new FileInputStream(file);
CRC32 crc = new CRC32();

while (-1 != (bytesRead = fis.read(buf))) {
crc.update(buf, 0, bytesRead);
}

fis.close();
return crc.getValue();
}
 
S

Strippenzieher

Gast
weiß denn keiner wie ich eine prüfsume für eine Datei berechne und nicht einen Byte-anteil der datei?
 
T

tuxedo

Gast
Du kannst den CRC AFAIK nicht "auf einmal auslesen". Zum errechnen des CRCs musst du jedes byte angesehen haben. Ob nun byte für byte, in 128byte Blöcken oder in 1024 byte Blöcken ist dabei egal (Der Hintergrund für das Blockweise lesen liegt im SPeicher: Man möchte z.B. keine 5GB Datei auf einmal in den Speicher lesen und an crc.update() füttern. Besser und Speicherschonender geht das in kleinen Blöcken zu 1024 byte, oder 128 byte oder was auch immer für "ausreichend" befunden wird). Letztendlich muss eben der ganze Inhalt der Datei über "crc.update()" geschleift werden, damit man am Ende sagen kann: "Gib mit jetzt bitte die Prüfsumme (also crc.getValue()).

- Alex

P.S. Dein letztes Codesample sollte die Prüfsumme korrekt wiedergeben können.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S den zweit niedrigsten wert in einem array berechnen Allgemeine Java-Themen 2
J Wie kann man herausfinden, wo der Wert herkommt ? Allgemeine Java-Themen 13
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S Wert zuweisung Allgemeine Java-Themen 1
Alex_99 Rechner: Wert zwischenspeichern und bei Bedarf mit Ihm weiterrechnen? Allgemeine Java-Themen 6
J Wo kommt der Wert der Variable her ? Allgemeine Java-Themen 6
Tiago1234 CellReference cr = new CellReference("") gibt den falschen Wert zurück Allgemeine Java-Themen 49
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
L String zu repräsentativen Wert Allgemeine Java-Themen 0
S Drools: Zählen wie oft ein Wert vorkommt Allgemeine Java-Themen 1
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
T Wert an laufenden Java-Prozess übergeben Allgemeine Java-Themen 10
A Variablen Funktion übergibt den Wert nicht Allgemeine Java-Themen 13
P JSpinner gibt leeren Wert zurück Allgemeine Java-Themen 5
KeexZDeveoper Nächstgelegenden Wert ermitteln Allgemeine Java-Themen 5
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
A Mit dem letzten bis zum ersten Wert aus Array rechnen Allgemeine Java-Themen 15
T Array - Wert am nächsten zur vollen Sekunde Allgemeine Java-Themen 20
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Wert ändert sich nicht Allgemeine Java-Themen 12
E JavaFX String-Wert geht "verloren" - ratlos Allgemeine Java-Themen 2
A In Excel-Datei schreiben, Formeln der Mappe anwenden, Wert lesen Allgemeine Java-Themen 3
R Int Wert im Dialogfeld ändern Allgemeine Java-Themen 4
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
H Bestimmten Wert aus String parsen Allgemeine Java-Themen 7
M HashMaps: Wert erweitern Allgemeine Java-Themen 3
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
M Parallele Programmierung: volatile Variable nimmt ungewöhnlichen Wert an Allgemeine Java-Themen 3
T Datentypen ArrayUtils.indexOf( ... ) liefert -1 obwohl Wert scheinbar enthalten ist Allgemeine Java-Themen 15
H Speziellen Wert aus String filtern Allgemeine Java-Themen 4
M JExcel Wert aus Zelle übergeben/ausgeben Allgemeine Java-Themen 2
iB0T Variable Wert ausrauchen Allgemeine Java-Themen 3
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
G Z Wert - 3 Dimensionaler Punkt Allgemeine Java-Themen 13
S JPA und Entity-Klassen: Wert ungültig Allgemeine Java-Themen 6
C .Ini-Datei Wert Änderungen werden nicht angenommen Allgemeine Java-Themen 3
J String mit "," in Double Wert konvertieren Allgemeine Java-Themen 7
A nur einen Wert aus einer .conf lesen und erneuern Allgemeine Java-Themen 3
I getResponseCode(); returnt einen falschen Wert? Allgemeine Java-Themen 7
N Applet Apache Poi Wert einer Formel ausgeben Allgemeine Java-Themen 5
G Input/Output Manuelle Änderung von Wert in Swing Komponente bemerken! Allgemeine Java-Themen 2
S Newton-Verfahren liefert nur 1 Wert Allgemeine Java-Themen 3
E Wert von enum zur Laufzeit festlegen. Allgemeine Java-Themen 5
E Wert in andere Klasse übernehmen Allgemeine Java-Themen 4
X this.val$WERT Was ist den das? Allgemeine Java-Themen 2
K Scanner - große Textfile, nur 0 ab betim. Wert Allgemeine Java-Themen 4
S Daten in Array als INT-Wert einlesen - jetzt als csv Datei Allgemeine Java-Themen 5
T OLE-Automation mit Excel (Wert übergabe) Allgemeine Java-Themen 1
Benji0815 Wert in GUI aktualisieren, Beobachter Allgemeine Java-Themen 9
O Hash Wert von Passwörter erstellen (SHA) Allgemeine Java-Themen 9
G Double Wert über OutputStream verschicken Allgemeine Java-Themen 2
S Methode übergibt immer den gleichen Wert Allgemeine Java-Themen 21
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
M Bit Wert umdrehen Allgemeine Java-Themen 5
J ArrayList aus Point-Objekten nach dem x-Wert ordnen Allgemeine Java-Themen 2
B Wert mit Adresse auslesen Allgemeine Java-Themen 11
S Array: Anzahl Elemente mit best. Wert zählen Allgemeine Java-Themen 4
M Ein Array-Wert soll sich verändern, aber 2 tun es? Allgemeine Java-Themen 7
S Prüfen auf Hex-Wert fester Länge! Allgemeine Java-Themen 5
G transientes Objekt mit Wert initialisieren? Allgemeine Java-Themen 7
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
reibi double-Wert auf 2 Stellen nach dem Komma abschneiden Allgemeine Java-Themen 6
MQue Float- Wert formatieren Allgemeine Java-Themen 8
A Private-Wert eines Objekts auslesen Allgemeine Java-Themen 9
R Wert von einer Klasse in eine andere bekommen Allgemeine Java-Themen 6
J Integer Array Wert vorhanden? Allgemeine Java-Themen 6
N Wert in ArrayList ändert sich ohne wissentliches zutun Allgemeine Java-Themen 6
O System.nanoTime() einheitlichen Wert auf mehreren Rechnern? Allgemeine Java-Themen 9
H JTable Wert verändern Allgemeine Java-Themen 3
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
J Vector - Wert ersetzen Allgemeine Java-Themen 14
H Zugriff auf Wert einer Umgebungsvariablen Allgemeine Java-Themen 2
H JSF - Wert an ein managed bean übergeben Allgemeine Java-Themen 2
H boolean wert ändern Allgemeine Java-Themen 2
R Wert in Hashtable ändern (Key ändern, Value bleibt) Allgemeine Java-Themen 3
G Wandeln von Char Wert in Zeichen? Allgemeine Java-Themen 2
B Java Klasse muß in Terminal einen Wert zurückgeben. Allgemeine Java-Themen 3
R ascii-wert zuweisung Allgemeine Java-Themen 4
B Wert zuweisen bei deklaration? Allgemeine Java-Themen 9
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
A Float-Wert auf 2 Stellen nach den Komma runden ? Allgemeine Java-Themen 2
B Double-Wert aus einem HexString erstellen. Allgemeine Java-Themen 11
B Wie bekomme ich den Wert aus der For-Schleife? Allgemeine Java-Themen 5
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
bittedanke Wie benötigte Bits berechnen (Huffmankodierung) Allgemeine Java-Themen 7
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
ReinerCoder Kombinationsmöglichkeiten der Textfelder berechnen Allgemeine Java-Themen 14
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
C Java Script Pause berechnen Allgemeine Java-Themen 5
D Kgv aller Paare aus einem Array mit n integer berechnen Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben