java序列化xml
『壹』 java反序列化xml,為什麼報錯了
感覺是你while語句那塊的問題,while(ois.readObject()!=null)這條語句表明從對宏攜象流中讀取一個對族絕核象,此時對象流已經從文件中讀取了位元組序列並且創建了兆掘一個對象的實例。而你又在while語句中再次調用ois.readObject(),對象流會再次讀取文件中的
『貳』 什麼是java序列化,如何實現java序列化
序 列 化: 指把堆內存中的Java對象數據,通過某種方式把對象存儲到磁碟文件中或者傳遞給其他網路的節點(在網路上傳輸).我們把這個過程稱之為序列化.
反序列化:把磁碟文件中的對象數據或者把網路節點上的對象數據,恢復成Java對象的過程.
為什麼要做序列化:
1):在分布式系統中,需要共享的數據的JavaBean對象,都得做序列化,此時需要把對象再網路上傳輸,此時就得把對象數據轉換為二進制形式.以後存儲在HttpSession中的對象,都應該實現序列化介面(只有實現序列化介面的類,才能做序列化操作).
2):服務鈍化:如果服務發現某些對象好久都沒有活動了,此時伺服器就會把這些內存中的對象,持久化在本地磁碟文件中(Java對象-->二進制文件).如果某些對象需要活動的時候,現在內存中去尋找,找到就使用,找不到再去磁碟文件中,反序列化我們得對象數據,恢復成Java對象.
需要做序列化的對象的類,必須實現序列化介面:java.io.Serializable介面(標志介面[沒有抽象方法]).
底層會判斷,如果當前對象是Serializable的實例,才允許做序列化. boolean ret = Java對象 instanceof Serializable;
在Java中大多數類都已經實現Serializable介面.
『叄』 java反序列化xml,為什麼報錯了
下面是在D盤下,People.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中,序列化是指的什麼有何用途
序列化,指將對象轉換為位元組序列的過程。
用途:
當你想把內存中的對象狀態保存到一個文件中或者資料庫中時候。
在webservice裡面我用到過,將java
object和field塞到xml裡面去。。。其他的不清楚
『伍』 java 中的序列化是什麼意思
簡單說就是為了保存在內存中的各種對象的狀態,並且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存Object States,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。
(1)什麼情況下需要序列化態察
a)當你想把的內存中的對象保存到一個文件中或者資料庫中時候;
b)當你想用套接字在網路上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;
(3)實現序列化(保存到一個文件)的步驟
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();
(4)舉例說明
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();
}
}
}
總結:安全方面的原因,比如一個對象擁有private,public等field,對於一個要傳輸的對象,則沖比如寫到文件,或者進行rmi傳輸 等等,在序列化進行傳輸的過程中,這個對象的private等域是不受保護的。資源分配方面的原因,比如socket,thread類,如果可以序列化,進行傳輸或者保存,也無法帆盯茄對他們進行重新的資源分 配,而且,也是沒有必要這樣實現。
『陸』 dataset使用java的序列化
dataset使用java的序列化方法:
1、一方面,試圖把RemotingFormat設置為SerializationFormat.Binary來序列化DataSet。
2、另一方面,也可物帆坦以簡單的把那行代碼注釋起轎沖來,並且保持默認值SerializationFormat.xml。在這種情況下,該例子都是通過計算執行deserialize這樣一個DataSet操作所罩桐需要的時間來做大致的性能估計。
『柒』 java 中的序列化是什麼意思有什麼好處
序列化 (Serialization)將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。
序列化是針對自定義類型或者零散數據,好處就是讓數據方便存儲和傳輸(傳遞),你可以理解為將零散的字母變成一個字元串(當然實際序列化過程並不是這么簡單),可以統一存儲和傳輸,而標准序列化傳遞後,還可以依次讀取出來。
序列化的目的是標准化和可存儲,通常用於資料庫、文件操作以及和系統標准化函數進行通信。
『捌』 JAVA中,序列化是指的什麼有何用途
序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化後的對象進行讀寫操作,也可將流化後的對象傳輸於網路之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。序列化的實現:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable只是為了標注該對象是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。
序列化:序列化是將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然後使用 HTTP 通過 Internet 在客戶端和伺服器之間傳輸該對象。在另一端,反序列化將從該流重新構造對象。
是對象永久化的一種機制。
確切的說應該是對象的序列化,一般程序在運行時,產生對象,這些對象隨著程序的停止運行而消失,但如果我們想把某些對象(因為是對象,所以有各自不同的特性)保存下來,在程序終止運行後,這些對象仍然存在,可以在程序再次運行時讀取這些對象的值,或者在其他程序中利用這些保存下來的對象。這種情況下就要用到對象的序列化。
對象序列化的最主要的用處就是在傳遞,和保存對象(object)的時候,保證對象的完整性和可傳遞性。譬如通過網路傳輸,或者把一個對象保存成一個文件的時候,要實現序列化介面
『玖』 java 對象序列化到xml java 對象到xml 轉化為string
marshaller.marshal,明顯就有很多參數。用OutputStream那個就可以寫入String了。。
用XmlStreamWriter也是可以。
『拾』 求 Java序列化對象轉xml方法....
/**這里應用了JAVA的Marshall方法
*對象轉xml
*返回xml
*@paramtXLife
*@return
*/
publicstaticStringtXLiftToXML(com.TXLifetXLife){
Stringxml="";
try{
ByteArrayOutputStreamout=newByteArrayOutputStream();
JAXBContextjc=JAXBContext
.newInstance("com");//包的命名空間
Marshallerm=null;
synchronized(jc){
m=jc.createMarshaller();
}
m.setProperty(Marshaller.JAXB_ENCODING,"GBK");
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
m.marshal(tXLife,out);
xml=out.toString();//賦值
}catch(Exceptione){
xml=null;
}
returnxml;
}