帮你的JDK做个小手术

本文介绍如何修改JDK中的ObjectOutputStream类源码,实现在对象序列化过程中进行跟踪,以定位可能引发错误的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文以jdk1.5.0_11为例,要实现的是修改JDK中的ObjectOutputStream这个类的源码,以便在对一些object进行串行化时可以进行跟踪,确定有没有错,是哪些对象引起的出错。

首先,在你的JDK安装根目录下, 找到这个文件src.zip,如果找不到,则必须到SUN的官方网站下载。然后在D盘建一个文件夹,如:D:/jdk。里面包括以下文件夹(src,lib,bin)其中的src为刚刚的src.zip解压得到的,lib中是你当前的JDK目录下jdk1.5.0_11/jre/lib下的rt.jar。bin下是包含了rt.jar解压出来的所有class文件。

以上工作完毕后,打开src下的java/io/ObjectOutputStream中的writeObject0(...)这个方法。在其最前面加上以下代码:

/**
      *
     
*/

    System.out.println(
"-------- Starting writeObject0 ---------------");
    
if ( obj==null
    

        System.out.println(
"obj is null"); 
    }
 else 
    
{
         String msg 
= obj.toString(); 
        
if ( obj instanceof Serializable ) 
            msg 
+= " (Serializable)"
            }
 else {
             msg 
+=" (Un-Serializable)"
            }
 
        System.out.println(msg);
    }
    
    
/**
      *
     
*/

 

然后在命令提示符下,进入D:/jdk,执行javac -cp ./lib/rt.jar ./src/java/io/ObjectOutputStream.java这个命令,然后把src/java/io/下的8个class文件复制到bin下的相同目录下,覆盖原来的class。然后在bin目录下执行

jar -fc0 rt.jar *这个命令,得到rt.jar文件,再把这个文件复制到你的JDK安装目录下,覆盖原来的rt.jar文件。

这样修改后,你以后再使用ObjectOutputStream进行对象串行化时,就会显示那些进行串行化的对象名,及一些引发异常的对象名,这样你就可以在你的应用中为所欲为了。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值