java实现写一个对象Dog到一个本地文件中D:/aaa.txt中,然后在把本地文件的那二进制码写回到我们的输入流中,然后用控制台打印出来。

本文介绍如何使用Java实现对象的序列化与反序列化操作,包括将Dog对象写入本地文件及从文件中读取并还原对象的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}
控制台打印如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值