java--Properties、序列化流及反序列化流

一、 Properties类

1、 Properties类介绍

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

特点:

(1)、Hashtable的子类,map集合中的方法都可以用。

(2)、该集合没有泛型。键值都是字符串。

(3)、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。

(4)、有和流技术相结合的方法。

2、常用方法

load(InputStream)  把指定流所对应的文件中的数据,读取出来,保存到Propertie集合中

load(Reader)

store(OutputStream,commonts)把集合中的数据,保存到指定的流所对应的文件中,参数commonts代表对描述信息

stroe(Writer,comments);

代码实现:

 1     Properties pro=new Properties();
 2     //存数据
 3     pro.setProperty("driver", "com.mysql.jdbc.driver");
 4     pro.setProperty("uesername", "root");
 5     pro.setProperty("password", "123456");
 6     //取数据
 7     //获取键的集合
 8     Set<String> set=pro.stringPropertyNames();
 9         //通过键找值
10     for(String s:set){
11         System.out.println(s+"..."+pro.getProperty(s));
12     }

从properties文件中读取键值对--代码实现:

 1 public static void method1() throws IOException{
 2         //从properties文件中读取键值对
 3         Properties pro=new Properties();
 4         //明确数据源
 5         FileInputStream fis=new FileInputStream("e:\\test\\demo1.properties");
 7         pro.load(fis);
 8         fis.close();
 9         //遍历
10         Set<String> set=pro.stringPropertyNames();
11         for(String s:set){
12             System.out.println(s+"..."+pro.getProperty(s));
13         }
14     }    

通过properties集合向properties文件中写键值对--代码实现:

 1 public static void method2() throws IOException{
 2         //通过properties向文件中写键值对
 3         //明确目的地
 4         FileOutputStream fos=newFileOutputStream("e:\\test\\demo2.properties");
 6         Properties pro=new Properties();
 7         pro.setProperty("name", "baba");
 8         pro.setProperty("age", "85");
 9         pro.store(fos, "你好");//“你好”是注释可写可不写
10     }

二、序列化流与反序列化流

用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流

用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流

特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。

1.对象序列化流ObjectOutputStream

person类:

 1 package com.oracle.Properties;
 2
 3 import java.io.Serializable;
 4
 5 public class Person implements Serializable{
 6     private String name;
 7     private transient int age;//瞬态关键字--序列化时这个属性就不会序列化了
 8     //定义序列号(定死)
 9     private static final long serialVersionUID=123456789L;
10     public Person(String name, int age) {
11         super();
12         this.name = name;
13         this.age = age;
14     }
15
16     public String getName() {
17         return name;
18     }
19     public void setName(String name) {
20         this.name = name;
21     }
22     public int getAge() {
23         return age;
24     }
25     public void setAge(int age) {
26         this.age = age;
27     }
28     @Override
29     public String toString() {
30         return "Person [name=" + name + ", age=" + age + "]";
31     }
32 }

测试类:

 1 public static void method3() throws IOException{
 2         Person p=new Person("张三", 18);
 3         //明确目的地
 4         FileOutputStream fos=new FileOutputStream("e:\\test\\person.txt");
 5         //创建序列化流
 6         ObjectOutputStream oos=new ObjectOutputStream(fos);
 7         //写入对象
 8         oos.writeObject(p);
 9         //释放资源
10         oos.close();
11     }

2.对象反序列化流ObjectInputStream

测试类:

 1   //反序列化
 2     public static void method4() throws IOException, ClassNotFoundException{
 3         //明确数据源
 4         FileInputStream fis=new FileInputStream("e:\\test\\person.txt");
 5         //创建反序列化对象
 6         ObjectInputStream ois=new ObjectInputStream(fis);
 7         //反序列化
 8         Person p=(Person)ois.readObject();
 9         System.out.println(p);
10     }

3.序列化接口

特点:

1.当一个对象要能被序列化,这个对象所属的类必须实现Serializable接口。(否则会发生异常NotSerializableException异常。

2.当反序列化对象时,如果对象所属的class文件在序列化之后进行的修改,那么进行反序列化也会发生异常InvalidClassException。发生这个异常的原因如下:

(1)该类的序列版本号与从流中读取的类描述符的版本号不匹配

(2)该类包含未知数据类型

(3)该类没有可访问的无参数构造方法

3.Serializable标记接口。该接口给需要序列化的类,提供了一个序列版本号。serialVersionUID. 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

4.瞬态关键字transient

当一个类的对象需要被序列化时,某些属性不需要被序列化,这时不需要序列化的属性可以使用关键字transient修饰。只要被transient修饰了,序列化时这个属性就不会序列化了。

同时静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化。

原文地址:https://www.cnblogs.com/-dashu/p/9541245.html

时间: 2024-10-15 03:21:21

java--Properties、序列化流及反序列化流的相关文章

Java基础知识强化之IO流笔记65:序列化流 和 反序列化流

1. 什么是 序列化 和 反序列化 ?     序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象.一般的格式是与平台无关的二进制流,可以将这种二进制流持久保存在磁盘上,也可以通过网络将这种二进制流传输到另一个网络结点.  反序列化(Anti Serialization ):是指把这种二进制流数据还原成对象. 2. 序列化流 和 反序列化

java中的序列化流和反序列化流

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px SimSun; color: #4e9072 } 序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输.  对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象.流数据 -- 对象(ObjectInputStream) 序列化流和反序列化流不同于字节流 字符流 内存字节流,这些都是把字符串写入/读取文件,序列

字符缓冲流,properties类,序列化流与反序列化流,打印流

1.字符缓冲流的写法与字节缓冲流类似,也是用字符缓冲对象嵌套字符读写对象.格式为: BufferedReader br=new BufferedReader(new FileReader(数据源)): BufferedWriter bw=new BufferedWriter(new FileWriter(目的地)): 2.BufferedReader有一个优势是可以读取一个文本行,它的方法是readLine(),这与FileReader相区别. 3.在IO操作时选用哪个对象,要看输入还是输出,文

java -&gt;IO流_序列化流与反序列化流

序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流(对象保存到文件中) l  特点:用于操作对象.可以将对象写入到文件中,也可以从文件中读取对象. 对象序列化流ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStream 读取

IO流--序列化流与反序列化流

IO流--序列化流与反序列化流: 序列化流:把对象当做流一样写入到文本文件中 ObjectOutputSream(); 反序列化流:把文本文件中的流对象还原成对象ObjectInputSream(): 具体的使用: 1   创建java对象 实现序列化接口(Serializable): 序列化代码实现: 1 private void writer() throws IOException { 2 ObjectOutputStream oos = new ObjectOutputStream(ne

序列化流与反序列化流

序列化流与反序列化流 用于从流中读取对象的 操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流 特点:用于操作对象.可以将对象写入到文件中,也可以从文件中读取对象. 1 对象序列化流ObjectOutputStream 注意:只能将支持 java.io.Serializable 接口的对象写入流中 public static void method01() throws IOException{

序列化流与反序列化流,打印流

序列化流与反序列化流 ObjectOutputStream(序列化流) 将 Java 自定义对象写入 OutputStream.可以使用 ObjectInputStream(反序列化流) 读取对象.通过在流中使用文件可以实现对象的持久存储. ObjectOutputStream 序列化流   writeObject() 将指定的对象写入ObjectOutputStream 例: //创建对象 person per=new person("小红帽",18);//自定义类 //目的地 Fi

详解 序列化流 与 反序列化流

目录 序列化流 与 反序列化流 ObjectOutputStream 类: (序列化流) ObjectInputStream 类: (反序列化流): (请观看本人博文--<详解 I/O流>) @ 序列化流 与 反序列化流 可能同学们看到本篇博文时会有如下问题: 什么是 序列化 与 反序列化 呢? 那么,现在,本人就来讲解下这两个名词的定义: 序列化: 就是把对象通过流的方式存储到文件中 反序列化: 就是把文件中存储的对象以流的方式还原成对象 现在,本人再来介绍下这两个流的作用: ObjectI

Java IO流-序列化流和反序列化流

2017-11-05 20:42:06 序列化流:把对象按照流的方式存入文本文件或者在网络中传输. 对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象. 流数据 -- 对象(ObjectInputStream) ObjectOutputStream ObjectOutputStream:ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectIn