对象逆序列化报错:java.lang.ClassNotFoundException

一个bug接受到的数据总是说类找不到。

我细致看了序列化实现了类名同样都同样
然后在服务端接收对象时候总报这个做,网上搜了一大堆最后发现了原来是包名不一样,导致了两个类不一样 了
程序真是个也严密的东西啊
贴代码给大家看看把

java.lang.ClassNotFoundException: xxxxxxxxxxxx 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:264) 
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:622) 
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593) 
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514) 
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750) 
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369) 
at xxxxxxxxxxxxxxxxx(TestMetadata.java:103) 

提示类找不到,但实际上类文件是确确实实存在的,那就上网搜。果然找到答案。

能够參考文章:  http://www.javapractices.com/topic/TopicAction.do?Id=45

最主要的两点:

1) 须要相同的包名

2) 相同的序列化ID



package testServerAndClient;




import java.io.IOException;  
import java.io.ObjectOutput;  
import java.io.ObjectOutputStream;  
import java.net.Socket;  
import java.net.UnknownHostException;  
  


public class client {  
/** 
 * 欢迎大家使用这个源代码 如有疑问请加qq群:151648295 
 *  
 */  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
   new client();  
    }  
     
    public client(){  
        try {  
            Socket s=new Socket("127.0.0.1",9999);  
            ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());  
            User u=new User();  
            u.setName("xiangqiao123");  
            u.setPass("123");  
            oos.writeObject(u);  
              
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
          
    }  
}  




package testServerAndClient;


import java.io.IOException;  
import java.io.ObjectInputStream;  
import java.net.ServerSocket;  
import java.net.Socket;  


public class Server {  
  
  
    public static void main(String[] args) {  
      
    new Server();  
    }  
    public Server(){  
          
        try {  
            ServerSocket ss=new ServerSocket(9999);  
            Socket s=ss.accept();  
              
             ObjectInputStream ois= new ObjectInputStream(s.getInputStream());  
             User user=(User)ois.readObject();  
              
            System.out.println(user);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
          
    }  
  
}   




package testServerAndClient;


import java.io.Serializable;  


public class User implements Serializable {  




private String name;  
private String pass;  


public String getName() {  
return name;  
}  
public void setName(String name) {  
this.name = name;  
}  
public String getPass() {  
return pass;  
}  
public void setPass(String pass) {  
this.pass = pass;  
}  


}  

转载于:https://www.cnblogs.com/zhchoutai/p/7260080.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值