0

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

在应用程序中有一个文本 CRC 计算,它在每个服务器中返回不同的值。例如:“Hipoplasia del seno frontal.Resto de senos faciales con desarrollo y neumatización habituales.No se observan lesiones ó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;
      }
}

谢谢!

4

1 回答 1

4

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

指定要用于获得一致结果的字符编码:

byte[] bytes = text.getBytes("UTF-8");
于 2013-04-03T18:19:29.183 回答