Ⅰ 什麼是xml的序列化與反序列化
序列化和反序列化並不是C#獨有的,包括java、php、js等都可以做到。 序列化是將對象狀態轉換為可保持或傳輸的格式的過程,比如轉化為二進制、xml、json等的過程。 與序列化相對的是反序列化,它將流轉換為對象,也就是將在序列化過程中所生成的...
Ⅱ 序列化和反序列化有幾種方式分別是什麼
截止至.NET 4.0總共有如下若干個序列化類
1.xml序列化 XmlSerializer
2.二進制序列化 BinaryFormatter
3.Soap序列化 SoapFormatter
4.WCF序列化 DataContractSerializer
5.Json序列化 DataContractJsonSerializer和JavascriptSerializer
Ⅲ java反序列化xml,為什麼報錯了
Plain Text code?
<?xml version="1.0" encoding="ISO-8859-1"?>
<people>
<person>
<first>Dr. Bunsen</first>
<last>Honeydew</last>
</person>
<person>
<first>Gonzo</first>
<last>The Great</last>
</person>
<person>
<first>Phillip J.</first>
<last>Fry</last>
</person>
</people>
下面是java文件:
Java code?
import java.util.ArrayList;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Elements;
public class People extends ArrayList<Person>{
public People(String fileName) throws Exception{
Document doc = new Builder().build(fileName);
Elements elements = doc.getRootElement().getChildElements();
for(int i = 0;i<elements.size();i++)
add(new Person(elements.get(i)));
}
public static void main(String[] args) throws Exception{
People p = new People("d:\People.xml");
System.out.println(p);
}
}
運行環境是netbeans 8.0.2,錯誤如下所示:
Plain Text code?
Exception in thread "main" com.sun.org.apache.xerces.internal.util.URI$MalformedURIException: Opaque part contains invalid character:
at com.sun.org.apache.xerces.internal.util.URI.initializePath(URI.java:1142)
at com.sun.org.apache.xerces.internal.util.URI.initialize(URI.java:702)
at com.sun.org.apache.xerces.internal.util.URI.<init>(URI.java:314)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.expandSystemId(XMLEntityManager.java:2037)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:612)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1300)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:1252)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:257)
at com.sun.org.apache.xerces.internal.parsers.DTDConfiguration.parse(DTDConfiguration.java:508)
at com.sun.org.apache.xerces.internal.parsers.DTDConfiguration.parse(DTDConfiguration.java:590)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at nu.xom.Builder.build(Unknown Source)
at nu.xom.Builder.build(Unknown Source)
at xml.People.<init>(People.java:21)
at xml.People.main(People.java:27)
Java Result: 1
Ⅳ 求教:java序列化和反序列化
概念:Java序列化是指把Java對象轉換為位元組序列的過程;而Java反序列化是指把位元組序列恢復為Java對象的過程。
如何實現Java序列化與反序列化?
1)JDK類庫中序列化API
java.io.ObjectOutputStream:表示對象輸出流
它的writeObject(Object obj)方法可以對參數指定的obj對象進行序列化,把得到的位元組序列寫到一個目標輸出流中。
java.io.ObjectInputStream:表示對象輸入流
它的readObject()方法源輸入流中讀取位元組序列,再把它們反序列化成為一個對象,並將其返回。
2)實現序列化的要求
只有實現了Serializable或Externalizable介面的類的對象才能被序列化,否則拋出異常。
3)實現Java對象序列化與反序列化的方法
假定一個Student類,它的對象需要序列化,可以有如下三種方法:
方法一:若Student類僅僅實現了Serializable介面,則可以按照以下方式進行序列化和反序列化
ObjectOutputStream採用默認的序列化方式,對Student對象的非transient的實例變數進行序列化。
ObjcetInputStream採用默認的反序列化方式,對對Student對象的非transient的實例變數進行反序列化。
方法二:若Student類僅僅實現了Serializable介面,並且還定義了readObject(ObjectInputStream in)和writeObject(ObjectOutputSteam out),則採用以下方式進行序列化與反序列化。
ObjectOutputStream調用Student對象的writeObject(ObjectOutputStream out)的方法進行序列化。
ObjectInputStream會調用Student對象的readObject(ObjectInputStream in)的方法進行反序列化。
方法三:若Student類實現了Externalnalizable介面,且Student類必須實現readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法,則按照以下方式進行序列化與反序列化。
ObjectOutputStream調用Student對象的writeExternal(ObjectOutput out))的方法進行序列化。
ObjectInputStream會調用Student對象的readExternal(ObjectInput in)的方法進行反序列化。
Ⅳ 什麼是java的序列化和反序列化
1、什麼是序列化?為什麼要序列化?
Java 序列化就是指將對象轉換為位元組序列的過程,而反序列化則是只將位元組序列轉換成目標對象的過程。
我們都知道,在進行瀏覽器訪問的時候,我們看到的文本、圖片、音頻、視頻等都是通過二進制序列進行傳輸的,那麼如果我們需要將Java對象進行傳輸的時候,是不是也應該先將對象進行序列化?答案是肯定的,我們需要先將Java對象進行序列化,然後通過網路,IO進行傳輸,當到達目的地之後,再進行反序列化獲取到我們想要的對象,最後完成通信。
2、如何實現序列化
2.1、使用到JDK中關鍵類 ObjectOutputStream 和ObjectInputStream
ObjectOutputStream 類中:通過使用writeObject(Object object) 方法,將對象以二進制格式進行寫入。
ObjectInputStream 類中:通過使用readObject()方法,從輸入流中讀取二進制流,轉換成對象。
2.2、目標對象需要先實現 Seriable介面
我們創建一個Student類:
public class Student implements Serializable {
private static final long serialVersionUID = 3404072173323892464L;
private String name;
private transient String id;
private String age;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", age='" + age + '\'' +
'}';
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Student(String name, String id) {
System.out.println("args Constructor");
this.name = name;
this.id = id;
}
public Student() {
System.out.println("none-arg Constructor");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
代碼中Student類實現了Serializable 介面,並且生成了一個版本號:
private static final long serialVersionUID = 3404072173323892464L;
首先:
1、Serializable 介面的作用只是用來標識我們這個類是需要進行序列化,並且Serializable 介面中並沒有提供任何方法。
2、serialVersionUid 序列化版本號的作用是用來區分我們所編寫的類的版本,用於判斷反序列化時類的版本是否一直,如果不一致會出現版本不一致異常。
3、transient 關鍵字,主要用來忽略我們不希望進行序列化的變數
2.3、將對象進行序列或和反序列化
如果你想學習Java可以來這個群,首先是一二六,中間是五三四,最後是五一九,裡面有大量的學習資料可以下載。
2.3.1 第一種寫入方式:
public static void main(String[] args){
File file = new File("D:/test.txt");
Student student = new Student("孫悟空","12");
try {
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(student);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));
Student s = (Student) objectInputStream.readObject();
System.out.println(s.toString());
System.out.println(s.equals(student));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
創建對象Student ,然後通過ObjectOutputStream類中的writeObject()方法,將對象輸出到文件中。
然後通過ObjectinputStream 類中的readObject()方法反序列化,獲取對象。
2.3.2 第二種寫入方式:
在Student 類中實現writeObject()和readObject()方法:
private void writeObject(ObjectOutputStream objectOutputStream) throws IOException {
objectOutputStream.defaultWriteObject();
objectOutputStream.writeUTF(id);
}
private void readObject(ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException {
objectInputStream.defaultReadObject();
id = objectInputStream.readUTF();
}
通過這中方式進行序列話,我們可以自定義想要進行序列化的變數,將輸入流和輸出流傳入對線實例中,然後進行序列化以及反序列化。
Ⅵ java中的多線程,序列化與反序列化。具體是做什麼用的
1)多線程:用於一個非常復雜且可能持續佔用時間的程序片段情況下。如果一個程序片段佔用時間長,那麼主程序main可能要等到執行完畢之後才能夠繼續下面的事情。我們可以使用一個線程來單獨為期服務,同時讓主線程繼續不收影響(好比做一個桌子,一個人做腳、桌面,同一時間只能幹一樁事情;但是如果兩個人,一個人做腳,第二個人做桌面,就快得多)。2)序列化,反序列化:用於把存儲內存中存儲的類對象保存起來——持久化(內存存儲特點:斷點後內存數據徹底消失)
Ⅶ Java中對象序列化與反序列化的幾種形式及各自的特點
這項技術主要應用於RMI(對象作為參數遠程傳遞及返回)和JavaBeans中。 Java中還提供了XMLEncoder和XMDecoder類來將JavaBeans對象序列化到XML文件,但是此種方法有諸多不便對Java類有很多限制(要滿足get/set方法等等,否則可能丟失該屬性值)。一個很強大的開源工具XStream,也能夠將對象保存到一個XML文件,並能從中恢復而且沒有那麼多限制。將XML作為一種進行對象傳遞的公共數據格式實現跨平台的進程通信。序列化和反序列化機制的強大在於能夠自動處理序列化對象之間的復雜關系(對象之間的相互引用,形成了復雜的對象網,因此要保證這種關系准確無誤的存儲起來。)。通過反序列化獲取對象的方式可以達到深度克隆對象一樣的效果,當然在性能上肯定有較大損失。
Ⅷ java中關於對象序列化和反序列化的問題!
這項技術主要應用於RMI(對象作為參數遠程傳遞及返回)和JavaBeans中。
Java中還提供了XMLEncoder和XMDecoder類來將JavaBeans對象序列化到XML文件,但是此種方法有諸多不便對Java類有很多限制(要滿足get/set方法等等,否則可能丟失該屬性值)。一個很強大的開源工具XStream,也能夠將對象保存到一個XML文件,並能從中恢復而且沒有那麼多限制。將XML作為一種進行對象傳遞的公共數據格式實現跨平台的進程通信。序列化和反序列化機制的強大在於能夠自動處理序列化對象之間的復雜關系(對象之間的相互引用,形成了復雜的對象網,因此要保證這種關系准確無誤的存儲起來。)。通過反序列化獲取對象的方式可以達到深度克隆對象一樣的效果,當然在性能上肯定有較大損失。
滿意請採納。
Ⅸ 關於使用XmlSerializer 序列化和反序列化的問題
[XmlRootAttribute("Extensiondata", IsNullable = false)]
public class Extensiondata
{
public string MagnetPullStrength;
public string MagnetGrade;
public string VisibleCustomerID;
}
XmlSerializer serializer = new XmlSerializer(typeof(Extensiondata));
TextWriter writer = new StreamWriter(CommonLogic.SafeMapPath("images\\po.xml"));
Extensiondata po = new Extensiondata();
po.MagnetPullStrength = TextBox1.Text;
po.MagnetGrade = TextBox2.Text;
po.VisibleCustomerID = TextBox3.Text;
serializer.Serialize(writer, po);
writer.Close();
Ⅹ java序列化與反序列化
測試對象
package com.basic.serialize;
import java.io.Serializable;
/**
* @author chichuxing
* @date 2017年2月3日 下午12:12:30
*/
public class DemoObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8891296985717552768L;
/**
* 屬性值.
*/
public String identityValue;
/**
* 屬性類型.
*/
public String identityType;
/**
* 模型ID.
*/
public String modelId;
/**
* transient關鍵字申明該欄位不會被序列化</br>
* 用戶ID.
*/
public transient String userId;
}