シリアライズしたファイルの読み込みに失敗
java.io.InvalidClassException: (クラス名); local class incompatible: stream classde
sc serialVersionUID = 8863601476261986964, local class serialVersionUID = -375203819810566
stream classdesc ファイルに保存された serialVersionUID
local class 実行プログラムのクラスの serialVersionUID
serialVersionUID の値を表示する Ant のタスク
http://www.oikaze.com/~tamada/Products/junk/
package com.oikaze.tama.ant.taskdefs; import java.io.*; import org.apache.tools.ant.Project; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.taskdefs.MatchingTask; /** * static final long serialVersionUID を表示する Ant のタスク. * * @author Haruaki TAMADA * @version $Revision$ $Date$ */ public class ViewSerialVersionTask extends MatchingTask{ private File baseDir; public ViewSerialVersionTask(){ } public void setBasedir(File baseDir){ this.baseDir = baseDir; } public void execute() throws BuildException{ if(baseDir == null){ baseDir = new File("."); } DirectoryScanner scanner = getDirectoryScanner(baseDir); String list[] = scanner.getIncludedFiles(); for(int i = 0; i < list.length; i++){ log(list[i], Project.MSG_DEBUG); printSerialVersionUID(list[i]); } } private void printSerialVersionUID(String target){ File inFile = new File(baseDir, target); if(!target.endsWith(".class")){ return; } try{ String className = target.substring(0, target.length() - 6).replace('/', '.'); className = className.replace('\\', '.'); Class c = Class.forName(className); if(checkSerializable(c)){ ObjectStreamClass osc = ObjectStreamClass.lookup(c); long serialVersionUID = osc.getSerialVersionUID(); System.out.println(c.getName() + ": static final long serialVersionUID = " + serialVersionUID + "L;"); } } catch(Exception e){ throw new BuildException(e.getMessage()); } } private boolean checkSerializable(Class c){ Class[] interfaces = c.getInterfaces(); for(int i = 0; i < interfaces.length; i++){ if("java.io.Serializable".equals(interfaces[i].getName())){ return true; } } return false; } }