序列化、反序列化:将对象以字节流的方式,进行写入或读取

序列化:将指定对象,以"字节流"的方式写入一个文件或网络中。

反序列化:从一个文件或网络中,以"字节流"的方式读取到对象。

package com.ztt.Demo01;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class demo16 {
	public static void main(String[] args) {
		ArrayList<String> list=new ArrayList<String>();
		list.add("张甜甜");
		list.add("张文印");
		list.add("甜甜");
		
		//序列化:将"对象"写入至文件
		try(ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("D:\\test\\tt\\list.bin"));){
			
			//将list集合对象,写入list.bin文件中
			oos.writeObject(list);
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
		
			e.printStackTrace();
		}
		
		
	}

}

输出结果:

package com.ztt.Demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class demo17 {
	public static void main(String[] args) {
        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\test\\tt\\list.bin"))) {
            // 读取对象并尝试转换为ArrayList<String>
            ArrayList<String> list = (ArrayList<String>) in.readObject();
            System.out.println(list);
        } catch (IOException | ClassNotFoundException e) {
           
            e.printStackTrace();
        } catch (ClassCastException e) {
            
            e.printStackTrace();
        }
    }
}

输出结果:

[张甜甜, 张文印, 甜甜]
package com.ztt.Demo01;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class demo18 {
	public static void main(String[] args) {
		Order order=new Order("SN002",1234.56,"AX59",0.5);
		
		//序列化时,该对象的类型,必须实现Serializable接口
		try(ObjectOutputStream oos=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("D:\\test\\tt\\order.ser")))){
			//写入对象
			oos.writeObject(order);
		
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		
	}
}
	
	class Order implements Serializable{
	
		/*
		 * 序列化版本号
		 */
		private static final long serialVersionUID=6607463456938102524L;
		private String orderNo;//订单编号
		private double pay;//支付金额
		private double sale;//折扣
		
		//transient关键字修饰的成员变量,在序列化时,不会被写入
		private transient String validateCode;//验证码
		
		//无参构造方法
		public Order() {
			this.orderNo="SN00X";
			this.pay=0.1;
			
		}
		
		//有参构造方法
		public Order(String orderNo, double pay,String validateCode,double sale) {
		this .orderNo = orderNo ;
		this.pay = pay;
		this.validateCode=validateCode;
		this.sale=sale;
		}
		
		public Order(String orderNo) {
			this.orderNo=orderNo;
		}
		

		@Override
		public String toString() {
			return "Order [orderNo=" + orderNo + ", pay=" + pay + ", sale=" + sale + ", validateCode=" + validateCode
					+ "]";
		}

		public String getOrderNo() {
			return orderNo;
		}
		public void setOrderNo(String orderNo) {
			this.orderNo = orderNo;
		}
		public double getPay() {
			return pay;
		}
		public void setPay(double pay) {
			this.pay = pay;
		}
		
		
		
		
		
		
	}


package com.ztt.Demo01;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;


public class demo19 {
	public static void main(String[] args) {
		//反序列化:从文件中读取一个对象
		try(ObjectInputStream in =new ObjectInputStream(
				new BufferedInputStream(
						new FileInputStream("d:\\test\\tt\\order.ser")))){
			Order order =(Order)in.readObject();
			System.out.println(order);
		} catch (ClassNotFoundException| IOException e) {
			e. printStackTrace();
		}
	}
}

输出结果:

Order [orderNo=SN002, pay=1234.56, sale=0.5, validateCode=null]

注意:
需要进行序列化操作的对象,必须实现Serializable接口,使用transient关键字修饰的成员变量,在序列化时,不会被写入;在反序列化时,不会被读取。
使用场景:本地缓存,在网络环境下,将对象以流的方式,进行传输。

例如:工作列表(备忘录): 

package com.ztt.Demo01;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Scanner;

//工作列表(备忘录)
public class demo20 {
	static ArrayList<String> todoList;
	static {
		//程序启动时,从文件中,反序列化得到一个todoList集合对象
		try(ObjectInputStream in=new ObjectInputStream(new BufferedInputStream(new FileInputStream("D:\\test\\tt\\todo.bin")));){
			//读取对象
			Object data=in.readObject();
			if(data==null) {
				todoList=new ArrayList<String>();
			}else {
				todoList=(ArrayList<String>)data;
			}
		} catch (FileNotFoundException e) {
			todoList=new ArrayList<String>();
	
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		
		
		System.out.println("程序启动完毕!");
		System.out.println("当前备忘录工作列表中包含:");
		System.out.println(todoList);
		
		System.out.println("是否添加新的备忘?");
		try(Scanner input=new Scanner(System.in)){
			String line=input.nextLine();
			while(line.equalsIgnoreCase("yes")) {
				//添加一个工作备忘
				String work=input.nextLine();
				todoList.add(work);
				
				System.out.println("是否继续添加?");
				line=input.nextLine();
			}
		}
		System.out.println("添加完毕!");
		System.out.println("当前备忘录工作列表中包含:");
		System.out.println(todoList);
		
		//程序退出时,将todoList集合对象,序列化至文件
		try(ObjectOutputStream out=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("D:\\test\\tt\\todo.bin")));){
			
			out.writeObject(todoList);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
		
	}

}

package com.ztt.Demo01;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;


public class demo19 {
	public static void main(String[] args) {
		//反序列化:从文件中读取一个对象
		try(ObjectInputStream in =new ObjectInputStream(
				new BufferedInputStream(
						new FileInputStream("d:\\test\\tt\\order.ser")))){
			Order order =(Order)in.readObject();
			System.out.println(order);
		} catch (ClassNotFoundException| IOException e) {
			e. printStackTrace();
		}
	}
}

输出结果: 

程序启动完毕!
当前备忘录工作列表中包含:
[AAA, BBB]
是否添加新的备忘?
yes
CCC
是否继续添加?
no
添加完毕!
当前备忘录工作列表中包含:
[AAA, BBB, CCC]

Properties

  • *.properties格式的文件,内容是Key-Value键值对格式(key=value)
  • 注释使用#
  • 使用Properties类完成*properties格式文件的读取和写入,读取使用 load(),写入使用store()
  • Properties类本质其实是一个Map集合,是Hashtable类的子类。

 

package com.ztt.Demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
//properties 类型的文件: key-value键值对文件
//读取

public class demo21 {
	public static void main(String[] args) {
		try(FileInputStream fis=new FileInputStream("D:\\test\\tt\\config.properties")){
		//创建Properties类型的对象props,用于读取* .properties类型的文件

		Properties props=new Properties();
		//读取
		props.load(fis);
		
		//根据key获取value
		System.out.println(props.get("029"));
		
		System.out.println(props);
		} catch (FileNotFoundException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}

}

输出结果:

西安
{2448=杭州, 029=西安, 020=上海}
package com.ztt.Demo01;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class demo22 {
	public static void main(String[] args) {
		//读取classpath路径下的*.properties文件
		//当前类所在的位置: Demo22. class . getResourceAsstream( " config. properties" )
		//当前ClassPath 下的指定位置: Demo22. class. getResourceAsstream( "/com/ .. ./config . properties'

		try(InputStream in=demo22.class.getResourceAsStream("/com/ztt/Demo01/config.properties")){
			Properties props=new Properties();
			props.load(in);
			System.out.println(props);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

}

输出结果:

{2448=杭州, 025=成都, 029=西安, 020=上海, 010=北京}
package com.ztt.Demo01;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

//properties文件的写入操作
public class demo23 {
	public static void main(String[] args) {
		Properties props=new Properties();
		props.put("version", "v0.0001");
		props.put("active-code", "asdfghjklzxcvbnmqwertyuiop");
		
		try(FileOutputStream fos=new FileOutputStream("D:\\test\\tt\\app.properties")){
			//将键值对,通过输出流写入指定文件,并添加注释
			props.store(fos, "My application basic properties data.");

		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}

}

输出结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/532697.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-2009. 使数组连续的最少操作数【数组 哈希表 二分查找 滑动窗口】

LeetCode-2009. 使数组连续的最少操作数【数组 哈希表 二分查找 滑动窗口】 题目描述&#xff1a;解题思路一&#xff1a;正难则反滑动窗口解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个整数数组 nums 。每一次操作中&#xff0c;你可以将 n…

rabbitmq延迟队列的使用

rabbitmq延迟队列的使用 1、场景&#xff1a; 1.定时发布文章 2.秒杀之后&#xff0c;给30分钟时间进行支付&#xff0c;如果30分钟后&#xff0c;没有支付&#xff0c;订单取消。 3.预约餐厅&#xff0c;提前半个小时发短信通知用户。 A -> 13:00 17:00 16:30 延迟时间&a…

麒麟V10安装Redis6.2.6

1、下载redis安装包 Redis各版本下载&#xff1a;https://download.redis.io/releases/ 2、将下载后的.tar.gz压缩包上传到到服务器自定义文件夹下 3、 解压文件 tar -zxvf redis-6.2.6.tar.gzmv redis-6.2.6 redis4、安装redis 在redis文件夹下输入make指令 cd /opt/redi…

性能测试 —— Jmeter 命令行详细

我们在启动Jmeter时 会看见&#xff1a;Don’t use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI) 这句话的意思就是说&#xff0c;不要使用gui模式进行负载测试&#xff0c;gui模式仅仅是创建脚本…

【LeetCode: 628. 三个数的最大乘积 + 排序 + 贪心】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

C++ linked_hash_map按顺序保存的容器

HashMap中不存在保存顺序的机制。而在LinkedHashMap中可以保持两种顺序&#xff0c;分别是插入顺序和访问顺序&#xff0c;这个是可以在LinkedHashMap的初始化方法中进行指定的。相对于访问顺序&#xff0c;按照插入顺序进行编排被使用到的场景更多一些&#xff0c;所以默认是按…

实现鼠标在页面点击出现焦点及大十字星

近段时间&#xff0c;在完成项目进度情况显示时候&#xff0c;用户在操作鼠标时候&#xff0c;显示当鼠标所在位置对应时间如下图所示 代码实现步骤如下&#xff1a; 1.首先引用 jquery.1.7.js 2.再次引用raphael.js 3.然后引用graphics.js 4.最后引用mfocus.js 其中mfocu…

【leetcode面试经典150题】38. 生命游戏(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

蓝桥杯第九届省赛真题代码——彩灯控制器-附详细讲解思路

1. 比赛题目要求 2. 功能实现推荐步骤 首先&#xff0c;添加头文件&#xff0c;搭建最底层的代码&#xff0c;实现基本的流水灯运转与数码管显示rb2的电阻值 然后&#xff0c;进行pwm脉宽调制&#xff0c;实现rb2数值不同&#xff0c;从而灯光亮度不同。并作出数码管的多窗口…

Java GC了解

Jstack找到线程的快照 jvm提供其他命令作用 jps&#xff1a; 虚拟机进程状况工具&#xff0c;类似linux的ps命令 jstat&#xff1a;虚拟机统计信息监视工具&#xff0c;经常看gc情况的会使用到 jinfo: java配置信息工具 jmap&#xff1a; java内存映射工具&#xff0c;dump&am…

别催了!超真实格行5G随身WiFi问答它来了!格行5G随身WiFi靠谱吗? 看完这篇文章你就懂了?

总让我测格行5G随身WiFi&#xff0c;一直催催催。这下别催了&#xff0c;你们要的格行5G随身WiFi真实测评它来了&#xff01;这次着重回答大家最关心&#xff0c;问的最多的几个问题&#xff01; 一、问&#xff1a;格行5G随身WiFi网速怎么样&#xff1f; 答&#xff1a;格行5G…

网络编程套接字(一)

目录 一、源IP和目的IP 二、端口号 三、UDP协议和TCP协议 四、网络字节序 五、socket编程 1、socket 常见接口 2、struct sockaddr结构体 一、源IP和目的IP IP地址是IP协议提供的一种统一的地址格式&#xff0c;它为互联网上的每一个网络和每一台主机分配一个逻辑地址&am…

原子操作和竞争条件

所有系统调用都是以原子操作方式执行的。之所以这么说&#xff0c;是指内核保证了某系统调用中的所有步骤会作为独立操作而一次性加以执行&#xff0c;其间不会为其他进程或线程所中断。原子性是某些操作得以圆满成功的关键所在。特别是它规避了竞争状态&#xff08;race condi…

解决ModuleNotFoundError: No module named ‘exceptions‘

一、问题描述 使用python语言处理docx文档&#xff0c;在安装docx库时出现问题&#xff0c;No module named ‘exceptions‘ 二、解决方法 卸载docx&#xff0c;安装python-docx。 pip uninstall docx pip install python-docx 问题解决&#xff01;

SSRF靶场

SSRF概述 ​ 强制服务器发送一个攻击者的请求 ​ 互联网上的很多web应用提供了从其他服务器&#xff08;也可以是本地)获取数据的功能。使用用户指定的URL&#xff0c;web应用可以获取图片&#xff08;载入图片&#xff09;、文件资源&#xff08;下载或读取)。如下图所示&…

[lesson17]对象的构造(上)

对象的构造(上) 对象的初始化 从程序设计的角度&#xff0c;对象只是变量&#xff0c;因此&#xff1a; 在栈上常见对象时&#xff0c;成员变量初始为随机值在堆上创建对象时&#xff0c;成员变量初始为随机值在静态存储区创建对象时&#xff0c;成员变量初始为0值 生活中的对…

算法打卡day41|动态规划篇09| Leetcode198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

算法题 Leetcode 198.打家劫舍 题目链接:198.打家劫舍 大佬视频讲解&#xff1a;198.打家劫舍视频讲解 个人思路 偷还是偷&#xff0c;这取决于前一个和前两个房是否被偷了&#xff0c;这种存在依赖关系的题目可以用动态规划解决。 解法 动态规划 动规五部曲&#xff1a;…

生鲜蔬果配送小程序开发攻略

随着互联网的快速发展&#xff0c;电商行业也在不断壮大。生鲜蔬果作为日常生活必需品&#xff0c;在线销售的需求也在不断增加。为了满足这一需求&#xff0c;开发一款生鲜蔬果配送小程序成为了必要的事情。下面就给大家介绍开发这款小程序的攻略。 1. 确定开发需求 首先&…

Java Swing游戏开发学习23

内容来自RyiSnow视频讲解 这一节讲的是Character Status角色状态或属性。 前言 这一节讲的是实现角色状态或属性的显示&#xff0c;就有点像RPG游戏中&#xff0c;人物属性显示的面板&#xff0c;其中有玩家的装备、玩家的等级&#xff0c;各种防御值、闪避值、跑速什么的。…

基于BP神经网络的分类预测模型matlab代码

基于BP神经网络的分类预测模型matlab代码&#xff0c;该数据集下&#xff0c;本模型的表现优异&#xff0c;训练集准确率可达97%&#xff0c;测试集准确率可达93.5%&#xff0c;表现优异。注释十分齐全适合新手学习。 代码获取链接&#xff1a;基于BP神经网络的分类预测模型ma…