`

数据多版本的读写

    博客分类:
  • Java
 
阅读更多

引子:在编写程序的时候,所有时间的变化、对基本的数据通常要更新,如一个学生类,一开始的时候,我们只想到了保存姓名,出生年月的属性,后来我们又想加入学生性别的属性了,后来又想加入学生的地址了。如何才能做到读写统一呢?

 

例子:

例子中给出了类D1_0-》D1_1-》D1_2,这三个类是继承关系,D1_0中只有d1,隔了一段时间想加入d2,写了类D1_1,又想加d3,写了类D1_2。数据保存的时候通常是个数组,这样我们假设写的时候写的数组始终是数组D1_0【】,读的时候也是。这样数据属性的变化,读写程序就不需要变了。

 

注意点:

1,旧版本的数据读入后,增加的数据又是新的版本,这样直接把旧的转化为新的数据,并成一个新数组写出了。

2,没有考虑,覆盖的问题,如果后来的数据想少些怎么办?现在认为不处理就行了。

3,。。。

 

public class Tsts {
	private static String file1_0 = "data1.0.txt";
	private static String file1_1 = "data1.1.txt";
	private static String file1_2 = "data1.2.txt";
	
	public static void main(String[] args) {
		D1_0[] d0A = new D1_0[]{new D1_0(),new D1_0(),new D1_0()}; // data version 1.0
		D1_1[] d1A = new D1_1[]{new D1_1(),new D1_1()}; // data version 1.1
		D1_2[] d2A = new D1_2[]{new D1_2(),new D1_2(),new D1_2(),new D1_2()}; // data version 1.2

		D1_0[] readData;
		// data version 1.0
		saveData(file1_0, d0A);
		readData = loadData(file1_0);
		for(D1_0 d : readData) {d.print();}

		// data version 1.1
		saveData(file1_1, d1A);
		readData = loadData(file1_1);
		for(D1_0 d : readData) {d.print();}
		
		// data version 1.2
		saveData(file1_2, d2A);
		readData = loadData(file1_2);
		for(D1_0 d : readData) {d.print();}

	}

	private static void saveData(String file, D1_0[] d0A) {
		ObjectOutputStream oos=null;
		try {
			FileOutputStream fos = new FileOutputStream(file);
			oos = new ObjectOutputStream(fos);
			oos.writeObject(d0A);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	private static D1_0[] loadData(String file) {
		D1_0[] d0A=null ;
		ObjectInputStream ois=null;
		try {
			FileInputStream fis = new FileInputStream(file);
			ois = new ObjectInputStream(fis);
			d0A = (D1_0[])ois.readObject();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return d0A;
	}
}
class D1_0 implements Serializable{
	private static final long serialVersionUID = -5747074459156767211L;
	private int d0;
	public void print() {System.out.println("D1_0 data version 1.0");}
}
class D1_1 extends D1_0 {
	private static final long serialVersionUID = -9091624871086037966L;
	private int d1;
	public void print() {System.out.println("D1_1 data version 1.1");}
}
class D1_2 extends D1_1 {
	private static final long serialVersionUID = -5704053473053777096L;
	private int d2;
	public void print() {System.out.println("D1_2 data version 1.2");}
}

 

结果 写道

D1_0 data version 1.0
D1_0 data version 1.0
D1_0 data version 1.0
D1_1 data version 1.1
D1_1 data version 1.1
D1_2 data version 1.2
D1_2 data version 1.2
D1_2 data version 1.2
D1_2 data version 1.2

 

分享到:
评论

相关推荐

    用多线程实现串口读写数据以及文件的读写

    本教程聚焦于如何利用多线程实现串口(Serial Port)读写数据及文件的读写操作,这对于理解和开发高效通信系统至关重要。 首先,我们要理解什么是串口通信。串口通信是一种基于串行数据传输的通信方式,它通过一条...

    C# AllenBradley读写操作PLC数据,C# 罗克韦尔读写操作PLC数据 全开源 c#零基础快速对接罗克韦尔PLC

    C# AllenBradley读写操作PLC数据,C# 罗克韦尔读写操作PLC数据 使用一个开源的技术来读写罗克韦尔PLC数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持...

    SMI20数据在线读写.docx

    "西门子 SMI20 数据在线读写方法" 根据提供的文件信息,我们可以总结出以下知识点: 1. 西门子 Drive_CLIQ 编码器数据在线读写方法: * 使用 CU320 控制器、驱动单元和电脑软件 STARTER V4.4 配置在线读写数据。 ...

    DM 数据守护与读写分离集群

    DM 数据守护与读写分离集群的使用涉及多个步骤,包括环境准备、集群配置、数据守护设置、读写分离策略配置等。开发工程师、测试工程师、技术支持工程师和数据库管理员都需要了解这些内容,以确保系统正确部署和高效...

    西门子PLC数据读写测试工具

    西门子PLC数据读写测试工具是一款专为西门子(Siemens)PLC系列设计的应用程序,它涵盖了S7-200Smart、S7-300、S7-400、S7-1200以及S7-1500等型号的控制器。该工具的主要功能在于简化和优化对PLC内部数据的读取和写入...

    C#多线程读写sqlite

    当多线程环境对SQLite进行读写操作时,可能会引发数据竞争和并发问题,因此必须采取适当的同步策略来确保数据的一致性和完整性。 标题"**C#多线程读写sqlite**"涉及的主要知识点包括: 1. **多线程编程**:C#中的`...

    数据图片读写器

    数据图片读写器

    CMOS 数据读写器

    CMOS(Complementary Metal-Oxide-Semiconductor)数据读写器是一款系统工具,主要用于在Windows 2000环境下读取和修改计算机系统中的CMOS存储器中的信息。CMOS是计算机主板上的一种特殊内存,它用于保存BIOS设置,...

    存储器读写软件 带串口数据线图纸

    这些软件通常用于调试、固件更新、故障排查和数据恢复等多个方面。它们能够与硬件接口通信,将数据传输到目标存储器中,或者从存储器中提取数据。 电视存储器读写器主要用于电视机的维修和升级,尤其是当电视机出现...

    shardingsphere4.1.1版本主从读写分离组合数据脱敏功能demo

    在这个"shardingsphere4.1.1版本主从读写分离组合数据脱敏功能demo"中,我们将探讨如何在实际应用中利用ShardingSphere实现这两个关键特性。 首先,让我们深入了解**读写分离**。在高并发的互联网应用中,为了提高...

    24C彩电数据读写软件

    《24C彩电数据读写软件:总线查询与数据管理详解》 在现代电子技术领域,24C系列的彩电数据读写软件扮演着至关重要的角色。这款最新的软件版本不仅支持对24C彩电的数据进行读取和写入操作,还集成了总线查询功能,...

    用VC++实现USB接口读写数据的程序

    VC++实现USB接口读写数据的程序 VC++实现USB接口读写数据的程序是一种使用VC++语言开发的程序,用于读写USB接口中的数据。在这个程序中,我们使用了SetupAPI函数来枚举和打开USB设备,然后使用设备接口来读写数据。...

    基于多线程和gdal类库的影像读写

    多线程允许程序同时执行多个任务,这里意味着可以并发处理不同的数据块,显著提高了影像读写的速度。特别是在多核处理器系统上,多线程可以充分利用硬件资源,实现并行计算,加快处理速度。然而,多线程编程也需要...

    用C语言读写SGY格式的地震数据文件-苏.rar_C语言;读写SGY格式文件_sgy_sgy文件读取_sgy读写_读写sgy文件

    为了处理不同地震道的数据,可能需要多个数组,每个数组对应一个道。 写入SGY文件的过程类似,但顺序相反。首先,创建并填充头信息,然后写入数据。`fwrite()`函数用于将内存中的数据写入文件。在写入头信息时,...

    图说Kepserver Data Exchange Client实现双PLC数据读写

    本篇文章将详细介绍如何利用Kepserver DXC来实现双PLC的数据读写,确保无缝链接。 首先,Kepserver DXC是Kepware开发的一个客户端工具,它支持OPC统一架构(UA)标准,能够与不同的PLC(可编程逻辑控制器)和其他...

    百万级数据读写Excle(源码)

    解决百万级数据读写Excel问题的关键在于分批处理和选择合适的库。批量处理可以避免一次性加载所有数据到内存,减少内存占用。对于写入,我们可以将数据分割成小块,逐个写入不同的工作表或者同一个工作表的不同行...

    读写扇区数据并复制数据

    同时,为了提高效率,可以使用多线程或异步I/O读写多个扇区。此外,对扇区的直接操作可能会影响系统稳定性,因此一般只在必要时进行。 对于文件系统,扇区数据的组织方式更为复杂。文件系统会在扇区上分布文件、...

    spring-boot-mybatis多数据源读写分离实例

    本实例将探讨如何利用Spring Boot和MyBatis框架实现多数据源的读写分离。以下是关于这个主题的详细讲解。 1. **Spring Boot**:Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发...

    MyBatis多数据源读写分离.docx

    MyBatis多数据源读写分离 MyBatis是一款流行的Java持久层框架,提供了许多强大的功能来简化数据库交互。在实际应用中,多数据源读写分离是非常常见的场景,今天我们就来讨论如何使用MyBatis实现多数据源读写分离。 ...

Global site tag (gtag.js) - Google Analytics