Java操作IO對(duì)象流進(jìn)行數(shù)據(jù)的讀寫
對(duì)象的讀寫
使用ObjectInputStream和ObjectOutputStream讀寫對(duì)象(序列化與反序列化)。
只有字節(jié)流沒有字符流
- .類必須實(shí)現(xiàn)Serializable接口
- 給類加個(gè)序列化編號(hào),給類定義一個(gè)標(biāo)記,新的修改后的類還可以操作曾經(jīng)序列化的對(duì)象
- 靜態(tài)是不能被序列化的,序列化只能對(duì)堆中的進(jìn)行序列化 ,不能對(duì)“方法區(qū)”中的進(jìn)行序列化
- 不需要序列化的字段前加 transient
小例子:
先創(chuàng)建一個(gè)Dog對(duì)象并序列化:
package com.uwo9.test03;
import java.io.Serializable;
public class Dog implements Serializable {
private static final long serialVersionUID = 2809685095868158625L;
String name;
String color;
}
再創(chuàng)建一個(gè)Student對(duì)象并序列化:
package com.uwo9.test03;
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = 9078616504949971001L;
static public String schoolName;
private transient String name;
private transient int age;
private double score;
private Dog dog;
public Student() {
super();
}
public Student(String name, int age, double score, Dog dog) {
super();
this.name = name;
this.age = age;
this.score = score;
this.dog = dog;
}
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 double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}
}
將數(shù)據(jù)寫入對(duì)象流并存入文件
package com.uwo9.test03;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collections;
public class Test01 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "大黃";
dog.color = "Yellow";
Student student1 = new Student("學(xué)生1", 18, 99,dog);
Student student2 = new Student("學(xué)生2", 19, 99,dog);
Student student3 = new Student("學(xué)生3", 20, 99,dog);
Student.schoolName = "某某大學(xué)";
File file = new File("E:/Temp/Test1.txt");
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(file));
//oos.writeObject(student);
ArrayList<Student> arrayList = new ArrayList<>();
Collections.addAll(arrayList, student1,student2,student3);
oos.writeObject(arrayList);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
從指定文件中讀取對(duì)象
package com.uwo9.test03;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public class Test02 {
public static void main(String[] args) {
// 從指定的文件中讀取對(duì)象
File file = new File("E:/Temp/Test1.txt");
ObjectInputStream ois=null;
try {
ois = new ObjectInputStream(new FileInputStream(file));
// 讀取對(duì)象
// Student stu = (Student)ois.readObject();
// System.out.println("讀取到的數(shù)據(jù)為:"+stu);
@SuppressWarnings("unchecked")
ArrayList<Student> arrayList = (ArrayList<Student>) ois.readObject();
for (Student student : arrayList) {
System.out.println(student);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
到此這篇關(guān)于Java操作IO對(duì)象流進(jìn)行數(shù)據(jù)的讀寫的文章就介紹到這了,更多相關(guān)Java IO流進(jìn)行數(shù)據(jù)的讀寫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springmvc前臺(tái)向后臺(tái)傳值幾種方式總結(jié)(從簡(jiǎn)單到復(fù)雜)
今天小編就為大家分享一篇springmvc前臺(tái)向后臺(tái)傳值幾種方式總結(jié)(從簡(jiǎn)單到復(fù)雜),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
如何實(shí)現(xiàn)Java的ArrayList經(jīng)典實(shí)體類
ArrayList是Java集合框架中一個(gè)經(jīng)典的實(shí)現(xiàn)類。他比起常用的數(shù)組而言,明顯的優(yōu)點(diǎn)在于,可以隨意的添加和刪除元素而不需考慮數(shù)組的大小。下面跟著小編一起來看下吧2017-02-02
Java字節(jié)流與基本數(shù)據(jù)類型的轉(zhuǎn)換實(shí)例
Java根據(jù)表達(dá)式獲取對(duì)象中的值及設(shè)置值的例子
JVM參數(shù)NativeMemoryTracking的使用

