導航:首頁 > 編程語言 > javaphp序列化

javaphp序列化

發布時間:2022-10-29 22:08:22

java序列化原理

將要序列化的對象實現Serializable介面,
Serializable介面沒有需要實現的方法,
implements Serializable只是為了標注該對象是可被序列化的,
然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

例子:

import java.io.*;

public class Test
{
public static void main(String[] args)
{
Employee harry = new Employee("Harry Hacker", 50000);
Manager manager1 = new Manager("Tony Tester", 80000);
manager1.setSecretary(harry);

Employee[] staff = new Employee[2];

staff[0] = harry;
staff[1] = manager1;
try
{
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream("employee.dat"));
out.writeObject(staff);
out.close();

ObjectInputStream in = new ObjectInputStream(
new FileInputStream("employee.dat"));
Employee[] newStaff = (Employee[])in.readObject();
in.close();

/**
*通過harry對象來加薪
*將在secretary上反映出來
*/
newStaff[0].raiseSalary(10);

for (int i = 0; i < newStaff.length; i++)
System.out.println(newStaff[i]);
}
catch (Exception e)
{
e.printStackTrace();
}
}

}

#p# class Employee implements Serializable
{
public Employee(String n, double s)
{
name = n;
salary = s;
}

/**
*加薪水
*/
public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}

public String toString()
{
return getClass().getName()
+ "[name = "+ name
+ ",salary = "+ salary
+ "]";
}

private String name;
private double salary;
}

class Manager extends Employee
{
public Manager(String n, double s)
{
super(n, s);
secretary = null;
}

/**
*設置秘書
*/
public void setSecretary(Employee s)
{
secretary = s;
}

public String toString()
{
return super.toString()
+ "[secretary = "+ secretary
+ "]";
}

//secretary代表秘書
private Employee secretary;
}

⑵ java中的序列化是什麼意思

  1. 序列化是將對象狀態轉換為可保持或傳輸的格式的過程。說白點就是你可以用對象輸出流輸出到文件。如果不序列化輸出的話,很可能會亂。

  2. java中的序列化機制能夠將一個實例對象(只序列化對象的屬性值,而不會去序列化什麼所謂的方法。)的狀態信息寫入到一個位元組流中使其可以通過socket進行傳輸、或者持久化到存儲資料庫或文件系統中;然後在需要的時候通過位元組流中的信息來重構一個相同的對象。

  3. 一般而言,要使得一個類可以序列化,只需簡單實現java.io.Serializable介面即可。

⑶ 序列化的方式有哪些

序列化
序列化 (Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以後,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。

序列化使其他代碼可以查看或修改,那些不序列化便無法訪問的對象實例數據。確切地說,代碼執行序列化需要特殊的許可權:即指定了 SerializationFormatter 標志的 SecurityPermission。在默認策略下,通過 Internet 下載的代碼或 Internet 代碼不會授予該許可權;只有本地計算機上的代碼才被授予該許可權。

通常,對象實例的所有欄位都會被序列化,這意味著數據會被表示為實例的序列化數據。這樣,能夠解釋該格式的代碼有可能能夠確定這些數據的值,而不依賴於該成員的可訪問性。類似地,反序列化從序列化的表示形式中提取數據,並直接設置對象狀態,這也與可訪問性規則無關。

對於任何可能包含重要的安全性數據的對象,如果可能,應該使該對象不可序列化。如果它必須為可序列化的,請嘗試生成特定欄位來保存不可序列化的重要數據。如果無法實現這一點,則應注意該數據會被公開給任何擁有序列化許可權的代碼,並確保不讓任何惡意代碼獲得該許可權。

中文名
序列化
外文名
Serialization
類型
概念
類別
通信
快速
導航
技術

Java編程中的序列化

php
目的
1、以某種存儲形式使自定義對象持久化;
2、將對象從一個地方傳遞到另一個地方。
3、使程序更具維護性。
技術
* 二進制序列化保持類型保真度,這對於在應用程序的不同調用之間保留對象的狀態很有用。例如,通過將對象序列化到剪貼板,可在不同的應用程序之間共享對象。您可以將對象序列化到流、磁碟、內存和網路等等。遠程處理使用序列化「通過值」在計算機或應用程序域之間傳遞對象。
* XML 序列化僅序列化公共屬性和欄位,且不保持類型保真度。當您要提供或使用數據而不限制使用該數據的應用程序時,這一點是很有用的。由於 XML 是一個開放式標准,因此,對於通過 Web 共享數據而言,這是一個很好的選擇。SOAP 同樣是一個開放式標准,這使它也成為一個頗具吸引力的選擇。
Java編程中的序列化
序列化的實現方法
把一個Java對象寫入到硬碟或者傳輸到網路上面的其它計算機,這時我們就需要自己去通過java把相應的對象寫成轉換成位元組流。對於這種通用的操作,我們為什麼不使用統一的格式呢?沒錯,這里就出現了java的序列化的概念。在Java的OutputStream類下面的子類ObjectOutputStream類就有對應的WriteObject(Object object) 其中要求對應的object實現了java的序列化的介面。
在使用tomcat開發JavaEE相關項目的時候,我們關閉tomcat後,相應的session中的對象就存儲在了硬碟上,如果我們想要在tomcat重啟的時能夠從tomcat上面讀取對應session中的內容,那麼保存在session中的內容就必須實現相關的序列化操作,還有jdbc載入驅動用的就是反序列化,將字元串變為對象。

⑷ Java 能 反序列化Php的數據么

理論上可以,不過你的php傳過來的數據是怎麼序列化的,是用php序列化的?
那需要你自己寫規則和php的序列化對應的反序列化。

⑸ java中如何實現序列化,有什麼意義

首先我們要把准備要序列化類,實現 Serializabel介面
例如:我們要Person類里的name和age都序列化
import java.io.Serializable;

public class Person implements Serializable { //本類可以序列化
private String name ;
private int age ;

public Person(String name,int age){
this.name = name ;
this.age = age ;
}
public String toString(){
return "姓名:" + this.name + ",年齡" + this.age ;
}
}
然後:我們將name和age序列化(也就是把這2個對象轉為二進制,統族理解為「打碎」)
package org.lxh.SerDemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream ;
public class ObjectOutputStreamDemo { //序列化
public static void main(String[] args) throws Exception {
//序列化後生成指定文件路徑
File file = new File("D:" + File.separator + "person.ser") ; ObjectOutputStream oos = null ;
//裝飾流(流)
oos = new ObjectOutputStream(new FileOutputStream(file)) ;

//實例化類
Person per = new Person("張三",30) ; oos.writeObject(per) ;//把類對象序列化
oos.close() ;
}
}

⑹ PHP中序列化有什麼用處

序列化可以將PHP中 對象、類、數組、變數、匿名函數等,轉化為字元串,這樣用戶就方便儲存和傳輸,對伺服器或web中減輕一定的壓力。

⑺ java 中的序列化是什麼意思有什麼好處

序列化 (Serialization)將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。
序列化是針對自定義類型或者零散數據,好處就是讓數據方便存儲和傳輸(傳遞),你可以理解為將零散的字母變成一個字元串(當然實際序列化過程並不是這么簡單),可以統一存儲和傳輸,而標准序列化傳遞後,還可以依次讀取出來。
序列化的目的是標准化和可存儲,通常用於資料庫、文件操作以及和系統標准化函數進行通信。

⑻ java 中的序列化是什麼意思

1、序列化是干什麼的?
簡單說就是為了保存在內存中的各種對象的狀態,並且可以把保存的對象狀態再讀出來。雖然你可以 用自己的各種方法來保存Object states,

但是Java給你提供一種應該比你自己好的保存對象狀態的機制、那就是序列化。
2、什麼情況下需要序列化?
a)當你想把的內存中的對象保存到一個文件或者資料庫中時候。
b)當你想用套接字在網路上傳送對象的時候
c)當你想通過RMI傳輸對象的時候(RMI->Remote Method Invocation 遠程方法調用)
3、當對一個對象實現序列化時,究竟發生了什麼?
在沒有序列化前,每個保存在堆(Heap)中的對象都有相應的狀態(state),即實體變數(instance ariable)
例如:Foo myFoo=new Foo(); myFoo.setWidth(20); myFoo.setHeight(40);

⑼ java 中的序列化是什麼意思有什麼好處

1、序列化是干什麼的?

簡單說就是為了保存在內存中的各種對象的狀態,並且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存Object States,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。

2、什麼情況下需要序列化

a)當你想把的內存中的對象保存到一個文件中或者資料庫中時候;
b)當你想用套接字在網路上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;

3、當對一個對象實現序列化時,究竟發生了什麼?

在沒有序列化前,每個保存在堆(Heap)中的對象都有相應的狀態(state),即實例變數(instance ariable)比如:

Foo myFoo = new Foo();
myFoo .setWidth(37);
myFoo.setHeight(70);

當通過下面的代碼序列化之後,MyFoo對象中的width和Height實例變數的值(37,70)都被保存到foo.ser文件中,這樣以後又可以把它 從文件中讀出來,重新在堆中創建原來的對象。當然保存時候不僅僅是保存對象的實例變數的值,JVM還要保存一些小量信息,比如類的類型等以便恢復原來的對 象。

FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myFoo);

4、實現序列化(保存到一個文件)的步驟

a)Make a FileOutputStream
java 代碼
FileOutputStream fs = new FileOutputStream("foo.ser");
b)Make a ObjectOutputStream

java 代碼
ObjectOutputStream os = new ObjectOutputStream(fs);
c)write the object

java 代碼
os.writeObject(myObject1);
os.writeObject(myObject2);
os.writeObject(myObject3);
d) close the ObjectOutputStream

java 代碼
os.close();

5、舉例說明

java 代碼
import java.io.*;

public class Box implements Serializable
{
private int width;
private int height;

public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}

public static void main(String[] args){
Box myBox = new Box();
myBox.setWidth(50);
myBox.setHeight(30);

try{
FileOutputStream fs = new FileOutputStream("foo.ser");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(myBox);
os.close();
}catch(Exception ex){
ex.printStackTrace();
}
}

}

6、相關注意事項

a)當一個父類實現序列化,子類自動實現序列化,不需要顯式實現Serializable介面;
b)當一個對象的實例變數引用其他對象,序列化該對象時也把引用對象進行序列化;
c)並非所有的對象都可以序列化,,至於為什麼不可以,有很多原因了,比如:

1.安全方面的原因,比如一個對象擁有private,public等field,對於一個要傳輸的對象,比如寫到文件,或者進行rmi傳輸 等等,在序列化進行傳輸的過程中,這個對象的private等域是不受保護的。
2. 資源分配方面的原因,比如socket,thread類,如果可以序列化,進行傳輸或者保存,也無法對他們進行重新的資源分 配,而且,也是沒有必要這樣實現。

⑽ java中什麼是序列化,怎麼通俗理解序列化和反序列化

Java是通過IO流實現序列化的,序列化其實就是將內存中的Java對象拆分通過輸出流傳輸到硬碟上保存起來,反序列化就是將硬碟中保存的Java對象組裝通過輸入流傳輸回內存中。

閱讀全文

與javaphp序列化相關的資料

熱點內容
nfs怎麼加密ipsec 瀏覽:245
國二考試調用編譯器運算選擇題 瀏覽:748
同濟大學高等數學pdf 瀏覽:232
延時的宏命令怎麼設置 瀏覽:594
資料庫有哪些加密 瀏覽:207
改之理反編譯注冊教程 瀏覽:389
什麼是編譯程序和翻譯程序 瀏覽:205
python課程心得總結 瀏覽:17
派派中怎麼看對方在哪個伺服器 瀏覽:794
xp配置java環境變數配置 瀏覽:7
python中1到100怎麼算 瀏覽:765
小度我想看程序員 瀏覽:505
bs刷裝備建立後文件夾沒有 瀏覽:79
找漫畫看應該下載什麼app 瀏覽:182
如何在vps上搭建自己的代理伺服器 瀏覽:744
nginxphp埠 瀏覽:403
內臟pdf 瀏覽:152
怎麼看雲伺服器架構 瀏覽:87
我的世界國際服為什麼登不進伺服器 瀏覽:998
微盟程序員老婆 瀏覽:932