`
joy_cz
  • 浏览: 136336 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

帮你的JDK做个小手术

阅读更多

本文以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进行对象串行化时,就会显示那些进行串行化的对象名,及一些引发异常的对象名,这样你就可以在你的应用中为所欲为了。。。。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics