24-IO流-55-IO流(ObjectOutputStream-对象的序列化)

package bean;

import java.io.Serializable;

public class Person implements Serializable{

	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 Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Person() {
		super();
		
	}
	
}

======================分割线=================================

/*
 * 能操作对象的流:
 * 		ObjectInputStream和ObjectOutputStream
 * 	被操作的对象需要实现Serializable(接口)
 * 
 * 这两个流可以将内存中的对象写到硬盘上→持久化
 * 这两个流也有序列化的概念,即第一个操作的对象,第二个……
 */

package demo;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

import bean.Person;

public class ObjectOutputStreamDemo {

	public static void main(String[] args) throws IOException {

		writeObj();
		
	}

	public static void writeObj() throws IOException {
		
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.Object"));
/*
 * 对象从内存存储到硬盘上,需要存储到文件中,且这里是关联目的且操作文件,那么用FileOutputStream,它可以写文件但是不可以
 * 写对象,所以外面再套个ObjectOutputStream。
 * 
 * 也可以想成,需要额外功能?需要写对象,那就ObjectOutputStream。
 */
		
/**
 * ObjectOutputStream写对象方法:
 * public final void writeObject(Object obj) throws IOException
 */
		
		oos.writeObject(new Person("小强",30));
		
		oos.close();
		
	}
	
/*
 * writeObj()运行抛出异常:
 * 		Exception in thread "main" java.io.NotSerializableException: bean.Person
 * 说明:NotSerializableException是指某个要序列化的对象不能实现 java.io.Serializable 接口。
 * 查找API发现Serializable接口是要求对象具备比较功能,要求用writeObject()方法写入的对象必须实现该接口,才能被序列化,
 * 相当于TreeSet集合必须将对象排序一样,所以Person类实现Serializable接口
 */

//在Person类实现Serializable接口后,运行程序,不再抛出异常

}

/*
 * 运行结果,在当前目录下新建obj.txt文本文件,其内容是一堆乱码,查找API,发现ObjectOutputStream类中:对象的默认
 * 序列化机制写入的内容是:对象的类,类签名,以及非瞬态和非静态字段的值。
 * 也就是说,那一堆乱码中包含对象的类名,类签名等信息。
 * 
 * 其实ObjectOutputStream类是将对象从内存写入硬盘中,不是让txt文件去解析,所以txt文件中出现乱码也无所谓。
 * 目的就是将对象持久化,不需要解析。
 * 
 * 【所以,用ObjectOutputStream把对象存入硬盘中时,不要存在txt文件下,扩展名应该是Object】
 */

//41行代码是将对象序列化,被序列化的对象必须实现Serializable接口。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
### 回答1: 序列化数组是将数组对象转换为字节流的过程,以便在网络上传输或保存到文件中。Java提供了对象IO流来实现序列化和反序列化操作。要序列化数组,需要将数组对象包装在一个对象中,然后使用ObjectOutputStream对象写入字节流。反序列化时,使用ObjectInputStream将字节流读取为对象,然后从对象中获取数组。需要注意的是,数组中的每个元素都必须是可序列化对象。 ### 回答2: Java输入输出(IO)流是Java应用程序中非常重要的一部分,它可以基于二进制流或字符流来输入或输出数据。对象IO流是Java IO流中的一种重要形式,可以用来处理Java对象。Java对象可以被序列化并写入文件中,以便在需要时读取。 序列化是将对象转换为字节序列的过程,以便可以将它们存储在磁盘上或在网络上传输。反序列化是将字节序列转换回对象的过程。使用Java序列化,可以将对象保存在文件中,然后在以后读取它们,或者在不同的机器之间传递对象序列化数组是将数组的所有元素序列化到文件中或者在网络上传输的过程。Java提供了多种序列化方法来序列化数组。以下是使用对象IO流进行序列化数组的步骤: 1. 创建一个需要序列化对象数组。例如,int[] array = {1, 2, 3, 4, 5}。 2. 创建一个输出流,可以使用文件输出流或套接字输出流,以便将字节数据写入文件或通过网络传输。 3. 创建序列化对象,将输出流对象作为参数传入。例如,ObjectOutputStream oos = new ObjectOutputStream(fos)。 4. 调用序列化对象的writeObject()方法来将数组对象序列化并写入输出流中。例如,oos.writeObject(array)。 5. 使用flush方法刷新缓冲区。 6. 关闭序列化流和输出流。例如,oos.close()和fos.close()。 7. 创建一个输入流,可以使用文件输入流或套接字输入流,以便从文件或网络接收字节数据。 8. 创建反序列化对象,将输入流对象作为参数传入。例如,ObjectInputStream ois = new ObjectInputStream(fis)。 9. 调用反序列化对象的readObject()方法,将字节数据读取为数组对象。例如,int[] newArray = (int[]) ois.readObject()。 10. 使用读取的数组对象进行必要的操作。 11. 关闭反序列化流和输入流。例如,ois.close()和fis.close()。 在使用Java对象IO流进行序列化和反序列化时,需要注意以下事项: 1. 需要序列化对象必须实现Serializable接口,该接口没有任何具体方法,只是将您的类标记为可序列化的类。 2. 如果不希望某些类的某些实例被序列化,可以使用transient关键字。 3. 在序列化和反序列化时,需要确保使用相同的序列化序列。如果序列化序列不同,反序列化将失败。 4. 序列化和反序列化可能会引起性能问题,因此需要在性能需求和数据安全性之间进行权衡。 ### 回答3: 在Java编程中,I/O流是非常重要的概念,它可以将数据从硬盘或网络读取到内存中,或将内存中的数据写入到硬盘或网络中,从而实现数据的交换。I/O流非常灵活,无论是读取文件、网络数据,还是处理用户输入等,都必不可少。而序列化则是I/O流的一种特殊形式,可以将Java对象转换成二进制的形式,以便在网络上进行传输或存储到硬盘中保存,同时也可以将二进制数据转换回Java对象。 Java序列化的过程中,我们可以将一个对象的所有属性都存储在一个数组中,这就是数组序列化。数组序列化非常灵活,我们可以将多个不同类型的对象存储在同一个数组中,在需要的时候从数组中读出来进行处理。数组序列化也非常适合用来存储表格、矩阵、图像等数据。 Java中的数组序列化可以通过使用ObjectOutputStreamObjectInputStream类来实现。ObjectOutputStream类可以将Java对象序列化为二进制数据输出流,而ObjectInputStream类可以将输入流中的二进制数据反序列化成Java对象。在进行序列化之前,必须保证对象中的所有成员变量都是可序列化的,否则将会抛出NotSerializableException异常。 实现数组序列化的步骤如下: 1. 创建数组对象,并初始化数组; 2. 创建ObjectOutputStream对象,并调用writeObject()方法将数组序列化到输出流中; 3. 创建ObjectInputStream对象,从输入流中读取二进制数据,并调用readObject()方法将数据反序列化成Java对象; 4. 关闭流。 下面是一个简单的数组序列化的样例代码: ```java import java.io.*; public class ArraySerialization { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; try { // 创建ObjectOutputStream对象 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("array.ser")); // 序列化数组对象到输出流中 out.writeObject(arr); out.close(); // 创建ObjectInputStream对象 ObjectInputStream in = new ObjectInputStream(new FileInputStream("array.ser")); // 从输入流中反序列化成Java对象 int[] newArr = (int[]) in.readObject(); for (int i = 0; i < newArr.length; i++) { System.out.print(newArr[i] + " "); } in.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } ``` 以上是一个数组序列化的简单样例,实际应用中还需要针对具体情况做调整,并且要注意处理可能出现的异常。总之,数组序列化是Java I/O流的一个重要方面,它可以方便地将多个数据存储到一个数组中,并在需要的时候进行读取和处理,同时也是Java数据持久化的一个重要手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值