最近我将使用32位java的tomcat5上的应用程序迁移到带有64位java的tomcat6。
在应用程序中有一个文本CRC计算,它在每个服务器中返回不同的值。 例如: “Hipoplasia del seno frontal.Resto de senos faciales con desarrolloyinnumatizaciónhabitales.Nose observanlesionesó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;
}
}
谢谢!
答案 0 :(得分:3)
请注意String.getBytes()
使用系统的默认字符编码将字符转换为字节。如果系统具有不同的默认字符编码,则会得到不同的字节数组,从而导致不同的校验和。
指定要用于获得一致结果的字符编码:
byte[] bytes = text.getBytes("UTF-8");