Ich muss Dateien mit Java mit einem CRC32-Code vergleichen, der von einem C# -Skript bereitgestellt wird. Wenn ich den CRC32 mit java.util.zip.CRC32 errechne, ist das Ergebnis völlig anders ...Java CRC32: nicht dasselbe wie CRC von C#
Meine Vermutung ist, dass das Polynom = 0x2033 des C# -Skriptes nicht das gleiche wie in zip.CRC32 ist. Ist es möglich, das Polynom einzustellen? Oder irgendwelche Ideen einer Java-Klasse für die Berechnung eines CRC32, wo Sie Ihr eigenes Polynom definieren können?
UPDATE: Problem ist nicht das Polymnom. Das ist das gleiche zwischen C# und Java
Das ist mein Code, vielleicht ist etwas falsch in der Art, wie ich die Datei lese?
package com.mine.digits.internal.contentupdater;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.CRC32;
public class CRC
{
public static String doConvert32(File file)
{
byte[] bytes = readBytesFromFile(file); // readFromFile(file).getBytes();
CRC32 x = new CRC32();
x.update(bytes);
return (Long.toHexString(x.getValue())).toUpperCase();
}
/** Read the contents of the given file. */
private static byte[] readBytesFromFile(File file)
{
try
{
InputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
byte[] bytes = new byte[(int)length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0)
{
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
System.out.println("Could not completely read file " + file.getName());
}
// Close the input stream and return bytes
is.close();
return bytes;
}
catch (IOException e)
{
System.out.println("IOException " + file.getName());
return null;
}
}
}
Vielen Dank, Frank
Die Alternativen sind: a) Sie verwenden die API nicht korrekt aus Java, C# oder beiden; b) Der von Ihnen verwendete C# -Code ist fehlerhaft. Ohne Ihren Code oder den von Ihnen verwendeten C# -Code zu sehen, ist es schwer zu sagen. Ein paar kurze aber komplette Programme mit einer kleinen Menge von Testdaten würde wirklich helfen. –
FYI: [Es ist buchstabiert "Java", nicht "JAVA".] (Http://programmers.stackexchange.com/q/2271/241) –
Ihr Java-Code sieht OK, vielleicht ist etwas auf der C# -Seite falsch? – Grodriguez