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

php序列化java

發布時間:2022-05-18 22:26:55

1. java 能 反序列化php的數據么

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

2. Java代碼如何反序列化PHP序列化數組後的字元串

public class ByteTest { public static void main(String[] args) { String str = "Hello world!"; // string轉byte byte[] bs = str.getBytes(); System.out.println(Arrays.toString(bs)); // byte轉string String str2 = new String(bs); System.out.println(str2); } }

3. 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;
}

4. 使用php的SESSION直接保存對象序列化,但反序列化時出錯

在output.php中$person沒有實例化成Person對象,所以無法調用Person對象的outPut()方法。

5. php 什麼是序列化

string serialize ( mixed value )

serialize() 返回字元串,此字元串包含了表示 value 的位元組流,可以存儲於任何地方。

這有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。

想要將已序列化的字元串變回 PHP 的值,可使用 unserialize()。serialize() 可處理除了 resource 之外的任何類型。甚至可以 serialize() 那些包含了指向其自身引用的數組。你正 serialize() 的數組/對象中的引用也將被存儲。

當序列化對象時,PHP 將試圖在序列動作之前調用該對象的成員函數 __sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復對象時, 將調用 __wakeup() 成員函數。

注: 在 PHP 3 中,對象屬性將被序列化,但是方法則會丟失。PHP 4 打破了此限制,可以同時存儲屬性和方法。請參見類與對象中的序列化對象部分獲取更多信息。

例子 1. serialize() 示例

<?php
// $session_data 是包含了當前用戶 session 信息的多維數組。
// 我們使用 serialize() 在請求結束之前將其存儲到資料庫中。

$conn = odbc_connect ("webdb", "php", "chicken");
$stmt = odbc_prepare ($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $PHP_AUTH_USER);
if (!odbc_execute ($stmt, &$sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, &$sqldata)) {
/* 出錯 */
}
}
?>

6. PHP中序列化有什麼用處

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

7. PHP序列化數據存儲在資料庫中使用json還是serialize好

1) 空間的比較
serialize在編碼後大概是json的1.5倍。
原因:
serialize後字元串包含了子串的長度,這可能是速度方面的優化,但是測試結果不盡人意。
serialize有更加詳細的類型區分,而json只有四種類型,並且是以簡單的符號表示。

2)速度的比較
在較小數據的情況下, serialize比json快數量級。
在大數據量的情況下,json比serialize稍微差一點

3)處理對象
json無法處理對象方法等數據。

4)使用范圍
在前後端交互一般都使用JSON,另外,目前JSON只支持UTF-8編碼的數據。
序列化使用serialize,特別是對象的存儲。這是其存在的意義。
與對象無關的數據存儲可以使用json,如包含大量數字的數組等。

這篇博客概括滿全面:http://blog.csdn.net/hguisu/article/details/7651730

8. PHP中序列化有什麼用處

你想如果想把一個數組或者是對象存儲到文件或資料庫中,怎麼辦。不能像字元串那樣的存儲吧。所以在存儲數組或對象之前先serialize,在取回內容時再unserialize...
一句話:serialize的作用是 產生一個可存儲的值的表示.unserialize的作用是 對單一的已序列化的變數進行操作,將其轉換回 PHP 的值。
更多問題可以去php中文網問答社區提問http://www.php.cn/wenda.html,大神在線幫你解決,希望對你有幫助

9. PHP把序列化後的對象轉換回來得到不完整的對象


<?php
//classa.inc:

classA{
public$one=1;

publicfunctionshow_one(){
echo$this->one;
}
}

//page1.php:

include("classa.inc");

$a=newA;
$s=serialize($a);
//把變數$s保存起來以便文件page2.php能夠讀到
file_put_contents('store',$s);

//page2.php:

//要正確了解序列化,必須包含下面一個文件
include("classa.inc");

$s=file_get_contents('store');
$a=unserialize($s);

//現在可以使用對象$a裡面的函數show_one()
$a->show_one();
?>

10. php中說的序列化對象是什麼意思

簡單的說,就是把一個包含很多內容的對象變成字元串.用於傳輸或存儲.
不太恰當的比喻,好比在<<駭客帝國>>中人從電話線中送到目的端(序列化後傳輸),再還原成人.(unserialize).
==============
serialize() 返回字元串,此字元串包含了表示 value 的位元組流,可以存儲於任何地方。

這有利於存儲或傳遞 PHP 的值,同時不丟失其類型和結構。

想要將已序列化的字元串變回 PHP 的值,可使用 unserialize()。serialize() 可處理除了 resource 之外的任何類型。甚至可以 serialize() 那些包含了指向其自身引用的數組。你正 serialize() 的數組/對象中的引用也將被存儲。

當序列化對象時,PHP 將試圖在序列動作之前調用該對象的成員函數 __sleep()。這樣就允許對象在被序列化之前做任何清除操作。類似的,當使用 unserialize() 恢復對象時, 將調用 __wakeup() 成員函數。

閱讀全文

與php序列化java相關的資料

熱點內容
24bit高頻精品解壓音樂 瀏覽:181
api程序員遇到更新 瀏覽:298
程序員程序運行搞笑圖 瀏覽:772
秦思怎麼下載app 瀏覽:691
發抖音怎麼發自己的APP網站 瀏覽:362
androidinbitmap 瀏覽:772
lzma源碼使用 瀏覽:748
ibm伺服器湖南經銷商雲伺服器 瀏覽:991
正規模板建站配雲伺服器商家 瀏覽:873
安卓清楚緩存命令 瀏覽:378
汽車壓縮機電磁離合器損壞怎麼修 瀏覽:507
怎麼提取安卓軟體 瀏覽:596
單片機和主機高速傳文件 瀏覽:479
男生直發加密需要剃光頭嗎 瀏覽:826
qtdesignerlinux 瀏覽:431
命令的幾要素 瀏覽:933
代理伺服器地址怎麼知道 瀏覽:173
漢語命令形 瀏覽:193
ACG官網下載的游戲怎麼解壓 瀏覽:964
stata交叉項命令 瀏覽:471