java实现写一个对象Dog到一个本地文件中D:/aaa.txt中,然后在把本地文件的那二进制码写回到我们的输入流中,然后用控制台打印出来。 经常记错输入流和输出流分别对应读还是写,后来我是这样记忆的,都是以内存为基准点,内存拿一支笔,可以将东西写到磁盘的文本中。这样就知道了输出流,就是从内存写出东西。反之,输入流就是从外边读入内存。 |
任务一:输出流,写出到本地文件
第一步:首先new一个对象Dog我们需要将该对象从内存写出到磁盘文件中,我们就需要实现一个接口Serializeble,该接口是一个标记接口,不需要实现里面的方法。
概念1-对象的序列化(Serialize):指将一个对象写到io流中,对象的序列化目标是将java对象转化为字节序列,这些字节序列可以保存在磁盘上,或者通过网络传输,以备以后可以重新恢复该java对象
package InAndOut.Serializable;
import java.io.Serializable;
public class Dog implements Serializable{
private int id;
private String name;
public Dog(int id,String name){
System.out.println("这个是有参数的构造器");
this.id=id;
this.name=name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第二步:使用ObjectOutputStream流将一个person对象写入到磁盘文件中。由于输出流ObjectOutputStream是一个处理流,必须建立在其它结点流的基础上,这里是建立在FileOutputStream流基础上。
package InAndOut.Serializable;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class WriteObject {
public static void main(String[] args) {
ObjectOutputStream obos = null;//ObjectOutputStream这是一个处理流,必须要建立再其他流的基础上,
try {
obos = new ObjectOutputStream(new FileOutputStream("D:/aaa.txt"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Dog dog = new Dog(10, "ahuang");
try {
obos.writeObject(dog);
System.out.println("成功将内存中的dog写出到D盘中的aaa.txt文本中了");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (obos != null) {
obos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行上边的main程序后,查看D盘下 的aaa.txt文本文件:
任务二:输入流,从本地文件写会:
任务二就是任务一的反向过程,我接下来就将这个文本的东西写回为我们的Dog对象,然后用控制台打印出来:
package InAndOut.Serializable;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class ReadObject {
public static void main(String[] args) {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("D:/aaa.txt"));
Dog dog = (Dog) ois.readObject();//这里我知道本身读回的对象是一个java对象,所以我可以强制转换
System.out.println("狗的id是:" + dog.getId() + " 狗的name是:" + dog.getName());
} catch (IOException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (ois != null) {
ois.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
控制台打印如下: