當前位置:首頁 » 存儲配置 » java序列化對象的存儲

java序列化對象的存儲

發布時間: 2022-07-25 18:35:39

『壹』 java中對象的序列化

好像沒有什麼關系把,某個對象需要序列化,這個對象的類實現java.io.Serializable即可,此介面中沒有任何需要覆蓋的方法。如果硬說跟哪個流有關系,應該是這兩個吧java.io.ObjectOutputStream,java.io.ObjectInputStream,這兩個流可以直接操作對象(比如Person對象),像你上面說的流只能操作數據,而不能是對象的,這兩個對象是對應的,一個是寫對象,一個是讀對象。

什麼時候用序列化?
一般我們的對象是在堆內存中的,不是持久化存儲,而你需要持久化存儲(即存到硬碟上),等待下次繼續來讀取這個對象來操作,這時候就需要把這個Person類實現序列化介面java.io.Serializable,java.io.ObjectOutputStream,java.io.ObjectInputStream來讀寫,用你用你說的那些流是無法做到的。另外,如果你的對象需要在網路上傳來傳去的,也需要序列化。

純手工打,本人也是初學,解釋的不好還請見諒!

『貳』 java定製序列化存儲(求助)

//你可以把所有的User存到一個ArrayList里再把list序列存儲

import java.io.Externalizable;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class UserSer {

private static FileOutputStream fos = null;
private static ObjectOutputStream oos = null;
private static FileInputStream fis = null;
private static ObjectInputStream ois = null;

public static boolean writeObj(String path, Object obj) {
boolean sec = false;
try {
fos = new FileOutputStream(path);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.flush();
oos.close();
fos.close();
sec = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sec;
}

public static Object readObj(String path) {
Object obj = null;
try {
fis = new FileInputStream(path);
ois = new ObjectInputStream(fis);
obj = ois.readObject();
ois.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return obj;

}

@SuppressWarnings("unchecked")
public static void main(String[] args) {
ArrayList<User>list = new ArrayList<User>();
User u1 = new User("tiger", 25);
User u2 = new User("aaron", 32);
list.add(u1);
list.add(u2);
String path = "Ser.tmp";
UserSer.writeObj(path, list);
list = null;
list = (ArrayList<User>)UserSer.readObj(path);
for(int i = 0; i < list.size(); i ++) {
System.out.println(list.get(i));
}
}

}

class User implements Externalizable {

private String name;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public User() {

}

public User(String name, int age) {
this.name = name;
this.age = age;
}

public String toString() {
return "我叫" + this.getName() + "," + this.getAge() + "歲";
}

private static final long serialVersionUID = 1L;

public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
String name = (String)in.readObject();
this.setName(name);
int age = in.readInt();
this.setAge(age);
}

public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(this.getName());
out.writeInt(this.getAge());
}

}

『叄』 java 對象序列化 可以保存static成員,為什麼

對象
序列化
後會保存所有的對象的類型和數據域,static修飾應該理解為為該類所有對象共享的一塊內存空間,序列化結果我理解是,在b被改變後會出現不同的版本,如果不想將其序列化,應該像c一樣標示為
transient

『肆』 java序列化問題以及怎麼存儲一個類對象

這不是亂碼,這是正常現象,只要重新載入到java程序中(反序列化),對象才能用。

『伍』 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() ;
}
}

『陸』 java 可序列化保存問題

可以參看一下sun的demo裡面的styledpad,裡面用的方法跟你用的大同小異,別聽那些刷分的刷子,什麼也不懂就吹大牛,包含了組件、圖片等內容的對象,最好的方法就是直接存對象了,每次存的時候把不可序列化的東西移除再存,存完再加回來就好了。

『柒』 java筆試題:序列化是什麼:Java 序列化如何實現

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

『捌』 什麼是java序列化,如何實現java序列化

序 列 化: 指把堆內存中的Java對象數據,通過某種方式把對象存儲到磁碟文件中或者傳遞給其他網路的節點(在網路上傳輸).我們把這個過程稱之為序列化.

反序列化:把磁碟文件中的對象數據或者把網路節點上的對象數據,恢復成Java對象的過程.

為什麼要做序列化:

1):在分布式系統中,需要共享的數據的JavaBean對象,都得做序列化,此時需要把對象再網路上傳輸,此時就得把對象數據轉換為二進制形式.以後存儲在HttpSession中的對象,都應該實現序列化介面(只有實現序列化介面的類,才能做序列化操作).

2):服務鈍化:如果服務發現某些對象好久都沒有活動了,此時伺服器就會把這些內存中的對象,持久化在本地磁碟文件中(Java對象-->二進制文件).如果某些對象需要活動的時候,現在內存中去尋找,找到就使用,找不到再去磁碟文件中,反序列化我們得對象數據,恢復成Java對象.

需要做序列化的對象的類,必須實現序列化介面:java.io.Serializable介面(標志介面[沒有抽象方法]).

底層會判斷,如果當前對象是Serializable的實例,才允許做序列化. boolean ret = Java對象 instanceof Serializable;

在Java中大多數類都已經實現Serializable介面.


『玖』 java中為什麼要進行對象序列化

序列化就是將一個對象的狀態(各個屬性量)保存起來,然後在適當的時候再獲得。
序列化分為兩大部分:序列化和反序列化。序列化是這個過程的第一部分,將數據分解成位元組流,以便存儲在文件中或在網路上傳輸。反序列化就是打開位元組流並重構對象。對象序列化不僅要將基本數據類型轉換成位元組表示,有時還要恢復數據。恢復數據要求有恢復數據的對象實例
序列化的什麼特點:
如果某個類能夠被序列化,其子類也可以被序列化。聲明為static和transient類型的成員數據不能被序列化。因為static代表類的狀態, transient代表對象的臨時數據。
什麼時候使用序列化:
一:對象序列化可以實現分布式對象。主要應用例如:RMI要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣。
二:java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。可以將整個對象層次寫入位元組流中,可以保存在文件中或在網路連接上傳遞。利用對象序列化可以進行對象的"深復制",即復制對象本身及引用的對象本身。序列化一個對象可能得到整個對象序列。

『拾』 如何理解Java對象的序列化

Java平台允許我們在內存中創建可復用的Java對象,但一般情況下,只有當JVM處於運行時,這些對象才可能存在,即,這些對象的生命周期不會比JVM的生命周期更長。但在現實應用中,就可能要求在JVM停止運行之後能夠保存(持久化)指定的對象,並在將來重新讀取被保存的對象。Java對象序列化就能夠幫助我們實現該功能。
使用Java對象序列化,在保存對象時,會把其狀態保存為一組位元組,在未來,再將這些位元組組裝成對象。必須注意地是,對象序列化保存的是對象的"狀態",即它的成員變數。由此可知,對象序列化不會關注類中的靜態變數。

熱點內容
桌面文件夾窗口 發布:2024-07-03 21:37:13 瀏覽:401
伺服器公網ip可以改么 發布:2024-07-03 21:12:57 瀏覽:686
新水滸傳ftp 發布:2024-07-03 21:07:24 瀏覽:475
造夢西遊4兌換密碼多少 發布:2024-07-03 20:50:56 瀏覽:197
分布式存儲dapp 發布:2024-07-03 20:47:52 瀏覽:638
硬碟解壓顯示內存不足 發布:2024-07-03 20:37:03 瀏覽:813
php7和5 發布:2024-07-03 20:30:43 瀏覽:209
組件化編譯是什麼 發布:2024-07-03 19:43:34 瀏覽:939
編程新年 發布:2024-07-03 19:38:45 瀏覽:936
客戶伺服器結構的特點是什麼 發布:2024-07-03 19:32:50 瀏覽:777