序列化和反序列化以及将内部写入文件然后读取它们并在构造函数中传递它们之间的区别

0 java serialization

让我们说我们上课了

Class A implements serializable{

    String s;
    int i;
    Date d;

    public A(){
    }

    public A(String s, int i, Date d){
        this.s =s;
       blah blah
    }
}
Run Code Online (Sandbox Code Playgroud)

现在让我们说一种方法,我将s,i,d的所有内部值存储到一个文件并再次读取它们,并将它们传递给构造函数并创建一个新对象.其次,我序列化然后反序列化为一个新对象.这两种方法之间的基本区别是什么.

我知道序列化将是缓慢和安全的,而另一种方法则不然.任何其他差异.

pak*_*ore 5

阅读本文,解释了什么是序列化(它适用于Java RMI,但序列化解释和问题是相同的):http://oreilly.com/catalog/javarmi/chapter/ch10.html

我看到的主要区别是:

  • (正如其他答案所说),您有责任序列化 - 反序列化.当其中一个属性是另一个大型复杂类时会发生什么?那你打算做什么?保存它的价值?
  • 序列化依赖于反射,而文件依赖于getter/setters/constructors.使用反射,您不需要公共setter/getter或带参数的构造函数.有了文件,你需要它们.

从上面的链接中提取:

使用序列化

序列化是内核Java库中的一种机制,用于将对象图写入数据流.然后可以以编程方式操纵该数据流,并且可以通过反转该过程来创建对象的深层副本.这种逆转通常称为反序列化.

特别是,序列化有三个主要用途:

  • 作为持久性机制.如果正在使用的流是FileOutputStream,那么数据将自动写入文件.
  • 作为复制机制.如果正在使用的流是ByteArrayOutputStream,那么数据将被写入内存中的字节数组.然后,可以使用此字节数组创建原始对象的副本.
  • 作为沟通机制.如果正在使用的流来自套接字,则数据将自动通过线路发送到接收套接字,此时另一个程序将决定该做什么.

需要注意的重要一点是序列化的使用与序列化算法本身无关.如果我们有一个可序列化的类,我们可以通过改变我们使用序列化机制输出的方式将它保存到文件或复制它.