java为什么默认不支持序列化?具体问题在1楼,多谢

各位大牛好,java为什么默认不支持序列化,而是要我们手动实现序列化接口,如果默认所有对象都可以被序列化不是更好吗?
网上查询说是序列化有风险,风险又是什么呢?而风险这个东西又可不可以被oracle给控制的没有风险呢。

http://blog.csdn.net/moudaen/article/details/19122233

 (1)对象序列化的行为是定义类的人才知道的,而不是Java语言或者jvm,比如如下代码:
class Process
{
public int PID;
}
用以上代码表示一个操作系统的进程,而PID代表进程ID,显然,进程ID是操作系统分配的,每次程序启动,都不同,那么序列化和反序列化它是没有意义的,非但没有意义,而且你把昨天的这个对象序列化了,今天重启了计算机,然后反序列化了,那么这个PID指向不存在的或者不相干的进程,岂不是乱套了。
(2)无限递归,无限循环的问题
class LinkedList
{
public LinkedList Header = this;
}
以上代码的Header指向自身,那么“自动序列化”,将导致无限循环,为了序列化LinkedList,必须序列化Header,而Header又是LinkedList……
(3)深拷贝还是浅层拷贝,Java无法判断
class A
{
public ArrayList list;
}
以上代码的list的每个成员指向一个对象,你序列化再反序列化,指向的不是原来的对象,而是新创造的对象,这一定符合类设计者的意图么?

不是所有的类都可以序列化,这一点理解了,那序列化的安全性问题是否就是private数据被暴露呢

不是所有的类都可以序列化,这一点理解了,那序列化的安全性问题是否就是private数据被暴露呢

安全性问题主要是指,攻击者可以通过序列化的数据得到它不应该得到的数据内容,比如私有字段等敏感的数据。
攻击者还可以通过反序列化构造虚假的对象,或者篡改数据。比如说对于一个随机数发生器,它通过构造一个种子(seed)为确定知道的随机数发生器,那么会产生事实上固定的随机数序列,那么用它加密数据就会很容易被破译。