CRC32 java在java 64位上不同



最近我将一个32位java的应用程序迁移到64位java的tomcat6上。

在应用程序中有一个文本CRC计算,在每个服务器中返回不同的值。例如:"前额叶上部发育不全。通过neumatización习惯恢复senos faciales。没有观察到的损伤óseas。Atentamente。"在32位JVM上返回:439231721在64位jvm上返回:2756208468

也在32位jvm tomcat6上尝试了一下,返回439231721

下面是crc计算的代码:

public static long doChecksum(String text) {
    try{
    //Convert string to bytes
    byte bytes[] = text.getBytes();
    Checksum checksum = new CRC32();
     // void update(bytes[] b, int start, int length)
    checksum.update(bytes,0,bytes.length);
    long lngChecksum = checksum.getValue();
            System.out.println(text + " : " + lngChecksum);
            return lngChecksum;
      } catch (Exception e) {
        return -1;
      }
}

谢谢!

注意,String.getBytes()使用系统的默认字符编码将字符转换为字节。如果系统具有不同的默认字符编码,则会得到不同的字节数组,从而导致不同的校验和。

指定您想要使用的字符编码以获得一致的结果:

byte[] bytes = text.getBytes("UTF-8");

最新更新