国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java中Serializable接口作用詳解

java中Serializable接口作用詳解

2020-09-30 15:54doymm2008 Java教程

這篇文章主要為大家詳細(xì)介紹了java中Serializable接口作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家解析javaSerializable接口的作用,具體內(nèi)容如下

 1.(serializable)主要支持對象的回復(fù),所以可以用來保存當(dāng)前的程序系統(tǒng)狀態(tài),遠(yuǎn)程方法調(diào)用RMI(遠(yuǎn)程機(jī)器必須含有必要的.class文件,否則將擲出classNotFound   Exception),但是因?yàn)樗鼘ο髷?shù)據(jù)自動(dòng)全部保存,你根本無法插手,因此對于一些敏感字段(如:password)存在安全問題。但相應(yīng)有很多解決的方法,例如可以在敏感字段的聲明中使用transient關(guān)鍵字,或者去繼承externalizable接口,自己來實(shí)現(xiàn)readExternal()和writerExternal()方法,再或者繼承serializable接口,但提供private   void   writeObject(ObjectOutputStream   s)等方法...   ...但注意static   成員的保存仍需要你的介入。

2.1.網(wǎng)絡(luò)傳輸   

2.數(shù)據(jù)庫持久   

3.把對象保存為文件形式,以便以后還原 

Object serialization的定義:

Object serialization 允許你將實(shí)現(xiàn)了Serializable接口的對象轉(zhuǎn)換為字節(jié)序列,這些字節(jié)序列可以被完全存儲以備以后重新生成原來的對象。

serialization不但可以在本機(jī)做,而且可以經(jīng)由網(wǎng)絡(luò)操作(RMI)。這個(gè)好處是很大的----因?yàn)樗詣?dòng)屏蔽了操作系統(tǒng)的差異,字節(jié)順序(用Unix下的c開發(fā)過網(wǎng)絡(luò)編程的人應(yīng)該知道這個(gè)概念)等。比如,在Window平臺生成一個(gè)對象并序列化之,然后通過網(wǎng)絡(luò)傳到一臺Unix機(jī)器上,然后可以在這臺Unix機(jī)器上正確地重構(gòu)這個(gè)對象。

Object serialization主要用來支持2種主要的特性:
1、Java的RMI(remote method invocation).RMI允許象在本機(jī)上一樣操作遠(yuǎn)程機(jī)器上的對象。當(dāng)發(fā)送消息給遠(yuǎn)程對象時(shí),就需要用到serializaiton機(jī)制來發(fā)送參數(shù)和接收返回直。

2、Java的JavaBeans. Bean的狀態(tài)信息通常是在設(shè)計(jì)時(shí)配置的。Bean的狀態(tài)信息必須被存起來,以便當(dāng)程序運(yùn)行時(shí)能恢復(fù)這些狀態(tài)信息。這也需要serializaiton機(jī)制。

二、sakulagi和rollingpig說的持久化我也說一下。

我覺得你們說的應(yīng)該是英文里的persistence.但是Java語言里現(xiàn)在只支持lightweight persistence,就是輕量級持久化,這是通過serialization機(jī)制來實(shí)現(xiàn)的。

persistence是指一個(gè)對象的生命周期不由程序是否執(zhí)行來決定,即使是在程序終止時(shí)這個(gè)對象也存在。它把一個(gè)serializable的對象寫到磁盤(本機(jī)或其他機(jī)器上的非RAM存儲器),并在程序重新調(diào)用時(shí)再讀取對象到通常的RAM存儲器。

為什么說Java的serialization機(jī)制實(shí)現(xiàn)的是lightweight persistence?因?yàn)槟惚仨氾@式的序列化和反序列化程序里的對象;而不是直接由一個(gè)關(guān)鍵詞來定義一個(gè)對象是序列化的然后由系統(tǒng)做相應(yīng)的處理。

下面是關(guān)于序列化的一個(gè)實(shí)例:

程序名稱:SerializationDemo.java
程序主題:實(shí)現(xiàn)對象的序列化和反序列化
程序說明:該程序由實(shí)例化一個(gè)MyClass類的對象開始,該對象有三個(gè)實(shí)例變量,類型分別為String、int、double,是希望存儲和恢復(fù)的信息。

代碼內(nèi)容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.io.*;
 
public class SerializationDemo{
 
public static void main(String args[]){
 
//Object serialization
try{
MyClass object1=new MyClass("Hello",-7,2.7e10);
System.out.println("object1:"+object1);
FileOutputStream fos=new FileOutputStream("serial");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(object1);
oos.flush();
oos.close();
}
catch(Exception e){
System.out.println("Exception during serialization:"+e);
System.exit(0);
}
 
//Object deserialization
try{
MyClass object2;
FileInputStream fis=new FileInputStream("serial");
ObjectInputStream ois=new ObjectInputStream(fis);
object2=(MyClass)ois.readObject();
ois.close();
System.out.println("object2:"+object2);
}
catch(Exception e){
System.out.println("Exception during deserialization:"+e);
System.exit(0);
}
}
}
 
class MyClass implements Serializable{
String s;
int i;
double d;
public MyClass(String s,int i,double d){
this.s=s;
this.i=i;
this.d=d;
}
public String toString(){
return "s="+s+";i="+i+";d="+d;
}
}

程序運(yùn)行結(jié)果:object1和object2的實(shí)例變量是一樣的,輸出如下:[code:1:a55efb5f91]object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10

 一個(gè)小例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
 
/**
* @author Yan Chenyang
*
* TODO 要更改此生成的類型注釋的模板,請轉(zhuǎn)至
* 窗口 - 首選項(xiàng) - Java - 代碼樣式 - 代碼模板
*/
public class  JFunction implements Serializable{
 
private double[][] bounds;
private int vnum;
private double result;
private String funcname;
 
public JFunction(){
super();
this.bounds=null;
this.vnum=0;
this.result=0.0;
this.funcname=null;
}
 
public JFunction(double[][] bounds){
super();
this.bounds=bounds;
this.vnum=bounds[0].length;
this.result=0.0;
this.funcname="Function 1";
}
 
public double Func(double[] var){
 
result=0.0;
for(int i=0;i<var.length;i++)
result+=var[i];
return result;
}
 
 
public static JFunction deserialize(ObjectInputStream oin) 
throws Exception{
 
JFunction f=(JFunction)oin.readObject();
    return f;
 
}
 
public void serialize(ObjectOutputStream oout) 
throws Exception{
oout.writeObject(this);
}
 
public String toString(){
return funcname ;
 
}
/**
* @return 返回 funcname。
*/
public String getFuncname() {
return funcname;
}
/**
* @param funcname 要設(shè)置的 funcname。
*/
public void setFuncname(String funcname) {
this.funcname = funcname;
}
}
 
public class JFunctionTest0 {
 
public static void main(String[] args){
 
double[][] bounds={{-2.048,-2.048},{2.048,2.048}};
JFunction function=new JFunction(bounds);
 
Interpreter interpreter=new Interpreter();
 
try {
 
double[] x={2.15,1.00};
interpreter.set("var",x);
interpreter.source("c:/x.bsh");
System.out.println(interpreter.get("ret"));
 
} catch (EvalError e) {
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
} catch (IOException e) {
// TODO 自動(dòng)生成 catch 塊
e.printStackTrace();
}
 
 
FileInputStream in=null;
    FileOutputStream out=null;
    ObjectInputStream oin=null;
    ObjectOutputStream oout=null;
    
    try{
    out = new FileOutputStream("function1.func");
    oout = new ObjectOutputStream(out);
    function.serialize(oout);//序列化
    oout.close();
    oout=null;
 
    in = new FileInputStream("function1.func");
    oin = new ObjectInputStream(in);
    JFunction tfunction =JFunction.deserialize(oin);//反序列化
    
    double[] var={2.0,5.0};
    
//    System.out.println(tfunction.Func(var));
//    System.out.println(tfunction);//打印結(jié)果
//    
    
    }catch(Exception ex){
    ex.printStackTrace();
    }finally{
    try {
        if (in != null) {
          in.close();
        }
        if (oin != null) {
          oin.close();
        }
        if (out != null) {
          out.close();
        }
        if (oout != null) {
 
          oout.close();
        }
      } catch (IOException ex1) {
        ex1.printStackTrace();
      }
    }    
}
}

序列化 用在 對象編碼成字節(jié)流及從字節(jié)流編碼重構(gòu)對象。   
序列化 為遠(yuǎn)程通信提供了標(biāo)準(zhǔn)的wire-level協(xié)議。   

要使類的實(shí)例實(shí)現(xiàn)序列化,只要在它的聲明中加入implements     

java.io.Serializable   

但是卻由一些隱患   

1.實(shí)現(xiàn)了序列化后,一旦發(fā)布,講削弱改變類實(shí)現(xiàn)的靈活性。   
2.增加了bug和安全漏洞的的可能性   
3.當(dāng)你的新版本發(fā)布時(shí)增加了相關(guān)的測試上的問題。   

類應(yīng)盡可能少的實(shí)現(xiàn)Serializable,接口也應(yīng)該少去擴(kuò)展它。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲欧美国产精品专区久久 | 国产日韩欧美视频 | 先锋资源在线观看 | 亚洲免费成人在线视频 | 免费一级在线观看 | 久热精品免费 | 成年人毛片视频 | 欧美午夜一区二区三区免费大片 | 中文字幕在线影院 | 美女视频黄的免费 | 国产欧美精品一区 | 欧美人成在线 | 精品少妇一区二区三区在线播放 | 杨门女将寡妇一级裸片看 | 久久丁香 | 亚洲国产精品一区二区第一页 | 国产真实精品久久二三区 | 中文字幕乱码亚洲精品一区 | 欧美中文字幕一区 | 免费看黄色一级视频 | 1a级毛片免费观看 | 久久精品国产亚洲一区二区三区 | 午夜免费影视 | 日本视频在线 | 日韩中文字幕一区二区 | 亚洲第一视频网站 | 欧美一级电影在线 | 日韩精品一区二区三区精品av | 国产欧美视频一区二区三区 | 久久亚洲综合 | 一区二区三区国产 | 亚洲精品国产成人 | 激情久久久 | 国产精品毛片一区视频播不卡 | 精品在线播放 | 一本大道色卡1卡2卡3 | 欧美黑人狂躁日本寡妇 | 国产免费久久 | 成人免费一区二区三区视频软件 | 香蕉一区| 日韩福利视频 |