再看看你关心的class字节代码部分
private static Long calculateSerialVersionId(IClassFileReader cfReader) throws IOException {
// implementing algorithm specified on
http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/class.html#4100 ByteArrayOutputStream os= new ByteArrayOutputStream();
DataOutputStream doos= new DataOutputStream(os);
doos.writeUTF(getClassName(cfReader.getClassName())); // class name
int mod= getClassModifiers(cfReader);
// System.out.println(Integer.toHexString(mod) + ' ' + Flags.toString(mod));
int classModifiers= mod & (Flags.AccPublic | Flags.AccFinal | Flags.AccInterface | Flags.AccAbstract);
doos.writeInt(classModifiers); // class modifiers
char[][] interfaces= getSortedInterfacesNames(cfReader);
for (int i= 0; i < interfaces.length; i++) {
doos.writeUTF(getClassName(interfaces[i]));
}
IFieldInfo[] sortedFields= getSortedFields(cfReader);
for (int i= 0; i < sortedFields.length; i++) {
IFieldInfo curr= sortedFields[i];
int flags= curr.getAccessFlags();
if (!Flags.isPrivate(flags) || (!Flags.isStatic(flags) && !Flags.isTransient(flags))) {
doos.writeUTF(new String(curr.getName()));
doos.writeInt(flags & (Flags.AccPublic | Flags.AccPrivate | Flags.AccProtected | Flags.AccStatic | Flags.AccFinal | Flags.AccVolatile | Flags.AccTransient)); // field modifiers
doos.writeUTF(new String(curr.getDescriptor()));
}
}
if (hasStaticClassInitializer(cfReader)) {
doos.writeUTF(STATIC_CLASS_INITIALIZER);
doos.writeInt(Flags.AccStatic);
doos.writeUTF("()V"); //$NON-NLS-1$
}
IMethodInfo[] sortedMethods= getSortedMethods(cfReader);
for (int i= 0; i < sortedMethods.length; i++) {
IMethodInfo curr= sortedMethods[i];
int flags= curr.getAccessFlags();
if (!Flags.isPrivate(flags) && !curr.isClinit()) {
doos.writeUTF(new String(curr.getName()));
doos.writeInt(flags & (Flags.AccPublic | Flags.AccPrivate | Flags.AccProtected | Flags.AccStatic | Flags.AccFinal | Flags.AccSynchronized | Flags.AccNative | Flags.AccAbstract | Flags.AccStrictfp)); // method modifiers
doos.writeUTF(getClassName(curr.getDescriptor()));
}
}
doos.flush();
return computeHash(os.toByteArray());
}
private static Long computeHash(byte[] bytes) {
try {
byte[] sha= MessageDigest.getInstance("SHA-1").digest(bytes); //$NON-NLS-1$
if (sha.length >= 8) {
long hash= 0;
for (int i= 7; i >= 0; i--) {
hash= (hash << 8) | (sha[i] & 0xFF);
}
return new Long(hash);
}
} catch (NoSuchAlgorithmException e) {
JavaPlugin.log(e);
}
return null;
}