java 不能反序列化_java中的序列化与反序列化
序列化就是將一個對象以及他的屬性寫入一個文件,保存在存中對象的狀態
反序列化就是把保存的對象狀態再讀出來
實現序列化與反序列化就要使用到IO操作中文件的字節流輸入與輸出
inputStream與outputStream對字節流操作inputStreamReader與outputStreamWrite為字符流操作
input與output是對于java內存而言的? ? ? ? ? ?input輸入是由外部----->內存? ? ? ? ? ? ? ?output輸出是內存---->外部
任何有能力產生數據流(源)的javaio對象就可以看作是一個InputStream對象,我們可以用read()方法將其取出
任何有能力接收數據源(流)的javaio對象我們就可以看作是一個OutputStream對象,可以用write()方法接受
字符流處理的單元為2個字節的Unicode字符,分別操作字符、字符數組或字符串,而字節流處理單元為1個字節,操作字節和字節數組。所以字符流是由Java虛擬機將字節轉化為2個字節的,Unicode字符為單位的字符而成的,所以它對多國語言支持性比較好!如果是音頻文件、圖片、歌曲,就用字節流好點,如果是關系到中文(文本)的,用字符流好點
1.字節流可用于任何類型的對象,包括二進制對象,而字符流只能處理字符或者字符串;
2. 字節流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以
字節流與字符流:http://blog.csdn.net/zxman660/article/details/7875799序列化分三步
1.創建FileOutputStream 對象,file是一個File類的對象
File file = new File("D:\\person.per");括號內表示生成文件的存儲路徑
FileOutputStreamfout = new FileOutputStream(file);
2.創建ObjectOutputStream 對象
ObjectOutputStream oos = null;
oos = new ObjectOutputStream(fout);
3.將對象寫入
p是一個實例化的對象Person p = new Person("aaa",12);
oos.writeObject(p);
最后就得關閉輸出流,節省資源
oos.close();
fout.close();
反序列化也分三步,與序列化對應
1.
1.新建FileInputStream 對象,讀取文件
FileInputStream fin = new FileInputStream(file);
2.新建ObjectInputStream 對象
ObjectInputStream oin;
oin = new ObjectInputStream(fin);
3.讀取文件并恢復為對象
Person per1 = (Person) oin.readObject();
fin.close();
oin.close();
public class Javaxuliehua {
public static void main(String[] args) {
//File file = new File("D:"+File.separator+"person.per");
File file = new File("D:\\person.per");
/**
* 序列化過程
*/
Person p = new Person("aaa",12);
try {
FileOutputStream fout = new FileOutputStream(file);
ObjectOutputStream oos = null;
oos = new ObjectOutputStream(fout);
oos.writeObject(p);
oos.close();
fout.close();
/**
* 反序列化過程
*/
FileInputStream fin = new FileInputStream(file);
ObjectInputStream oin;
oin = new ObjectInputStream(fin);
Person per1 = (Person) oin.readObject();
System.out.println(per1);
fin.close();
oin.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
}
class Person implements Serializable{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
總結
以上是生活随笔為你收集整理的java 不能反序列化_java中的序列化与反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 直播服务器_MyLive--使
- 下一篇: java重置_JAVA復制數組和重置數組