集合的序列化与反序列化

// Student.java  
package com.cn.day01.demo.demo3;

import java.io.Serializable;

/* java.io.NotSerializableException: 序列化过程中抛出了没有序列化 异常
    当一个对象进行序列化,和反序列化时,必须实现该 Serializable接口; 给该类添加一个标记
* */
public class Student implements Serializable {
    private static int id_s = 0;
    private int id;
    private String name;
    private int age;
    private String collage;
    private String location;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", collage='" + collage + '\'' +
                ", location='" + location + '\'' +
                '}';
    }

    public Student() {
        id_s++;
        this.id = id_s;
    }

    public Student(String name, int age, String collage, String location) {
        this.id = ++id_s;
        this.name = name;
        this.age = age;
        this.collage = collage;
        this.location = location;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getCollage() {
        return collage;
    }

    public void setCollage(String collage) {
        this.collage = collage;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

package com.cn.day01.demo.demo3;
/*1、对象序列化的机制。用一个字节序列,表示一个对象,该字节序列包含该 对象的数据、对象的类型、对象中存储的属性 等信息
2、反之,该字节序列还可以从文件中读取回来,重构对象,对他进行反序列化。
    对象的数据对象的类型,对象的属性。
* */

import java.io.*;
import java.util.ArrayList;

/*  1、ObjectOutputStream : 序列化,对象转化为字节
    2、ObjectInputStream: 反序列化,字节重构为对象
* */
public class IODemo01 {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //构造一个学生对象
        Student s1 = new Student("李四",19,"PKU","Beijing");
        //System.out.println(s1.getId());
        Student s2 = new Student("张三",20,"PKU","Beijing");
        //System.out.println(s2.getId());
        Student s3 = new Student("王五",21,"PKU","Beijing");
       // System.out.println(s3.getId());
        //对象存储进入集合
        ArrayList<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);

        //构建一个文件对象,需要存储学生信息的文件路径
        File file = new File("F:\\Test\\temp\\first\\IdeaProject\\File\\object.txt");
        IODemo01 ioDemo01 = new IODemo01();

        //使用对象方法存储学生信息
        ioDemo01.objectToFile(students,file);

        //从文件中反序列化 得到 对象
        ArrayList<Student> students_1 = ioDemo01.fileToObject(file);

        //从文件中得到对象 继续追加元素
        students_1.add(new Student("merry",18,"PKU","Beijing"));

        //对象序列化放入文件
        ioDemo01.objectToFile(students_1,file);

        //文件中的数据,反序列化得到对象,并打印结果
        ArrayList<Student> students_2 =ioDemo01.fileToObject(file);

    }
    public void objectToFile(ArrayList<Student> students,File file) throws IOException {
        //构建文件输出流
        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        //将集合中的对象序列化写入文件
        oos.writeObject(students);
        //刷新缓冲区
        oos.flush();
        //关闭输出流并释放资源
        oos.close();
    }
    public ArrayList<Student> fileToObject(File file) throws IOException, ClassNotFoundException {
        //构建文件输入流
        FileInputStream fis = new FileInputStream(file);
        //构建对象输入流(读文件)
        ObjectInputStream ois = new ObjectInputStream(fis);

        //创建存储对象的集合
        //read 获取对象
        ArrayList<Student> students = (ArrayList<Student>)ois.readObject();

        //打印得到的对象信息;
        for (Student student: students) {
            System.out.println(student);
        }

        //释放资源
        ois.close();

        //返回Student对象集合
        return students;
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
序列化反序列化是在编程中常用的概念,特别是在处理数据传输和存储时。JSON序列化反序列化是将对象转换为JSON字符串或将JSON字符串转换回对象的过程。 在ASP.NET中,可以使用JSON序列化反序列化来处理数据的传输和存储。JSON是一种轻量级的数据交换格式,易于阅读和编写。通过将对象序列化为JSON字符串,可以方便地在不同的系统之间进行数据传输或存储。 在C#中,可以使用Newtonsoft.Json库来进行JSON序列化反序列化。例如,可以使用Newtonsoft.Json.JsonConvert类的SerializeObject方法将对象序列化成JSON字符串,如下所示: ```C# string jsonString = JsonConvert.SerializeObject(products); ``` 其中,products是一个对象的集合,将被序列化为JSON字符串。 反之,可以使用Newtonsoft.Json.JsonConvert类的DeserializeObject方法将JSON字符串反序列化为对象,如下所示: ```C# List<Product> products = JsonConvert.DeserializeObject<List<Product>>(jsonString); ``` 其中,jsonString是一个包含JSON数据的字符串,将被反序列化为Product对象的集合。 在处理集合时,可以将集合对象序列化为JSON数组,然后通过反序列化将JSON数组转换回集合对象。这样可以方便地传输和存储多个对象。 总结起来,序列化反序列化是将对象转换为JSON字符串或将JSON字符串转换回对象的过程,可以使用Newtonsoft.Json库在ASP.NET中进行处理。可以通过将集合对象序列化为JSON数组来处理集合数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ASP.NET中JSON的序列化反序列化使用说明](https://download.csdn.net/download/weixin_38725119/14003664)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C#实现JSON字符串序列化反序列化的方法](https://download.csdn.net/download/weixin_38562492/13991505)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [选择5家上市的股份制商业银行或城市商业银行的股票交易数据(至少3年),采用Weibul分布法估计其90天周期95%...](https://download.csdn.net/download/Mrrunsen/88260549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值