Gson对象序列化和反序列化

我们将一个Java对象序列化为一个Json文件,然后读取该Json文件以获取对象。 在这个例子中,创建一个Student类。 然后将对象列化后存储在student.json文件中,该文件将具有Student对象的json表示形式。

示例

在中创建一个名为GsonTester的Java类文件,参考以下代码 -

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException;  

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder;  

public class GsonTester { 
   public static void main(String args[]) { 
      GsonTester tester = new GsonTester(); 
      try { 
         Student student = new Student(); 
         student.setAge(10); 
         student.setName("Mahesh"); 
         tester.writeJSON(student);  
         Student student1 = tester.readJSON(); 
         System.out.println(student1); 
      } 
      catch(FileNotFoundException e) { 
         e.printStackTrace(); 
      } 
      catch(IOException e) { 
         e.printStackTrace();
      } 
   } 
   private void writeJSON(Student student) throws IOException { 
      GsonBuilder builder = new GsonBuilder(); 
      Gson gson = builder.create(); 
      FileWriter writer = new FileWriter("student.json");   
      writer.write(gson.toJson(student));   
      writer.close(); 
   }  
   private Student readJSON() throws FileNotFoundException { 
      GsonBuilder builder = new GsonBuilder(); 
      Gson gson = builder.create(); 
      BufferedReader bufferedReader = new BufferedReader(
         new FileReader("student.json"));   

      Student student = gson.fromJson(bufferedReader, Student.class); 
      return student; 
   } 
} 
class Student { 
   private String name; 
   private int age; 
   public Student(){} 

   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 toString() { 
      return "Student [ name: "+name+", age: "+ age+ " ]";
   }  
}

执行上面示例代码,得到以下结果 -

Student [ name: Mahesh, age: 10 ]
2019-04-27 12:34

JSON教程

相关教程

更多

Java序列化

                    Java序列化    Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。  将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中
                

Twitter Storm 序列化

                    序列化 这篇文章是关于序列化方法在storm 0.6.0版及之前版本中是如何工作的。0.6.0版之前,storm使用一种不同的序列化方法,参见Serialization (prior to 0.6.0)。 元组可由任何一种类型的对象组成。由于storm是一个分布式系统,当对象在任务之间传递时,它需要知道如何序列化和反序列化这些对象。 Storm使用Kryo进行序列化。Kryo是一个灵活快速的序列化
                

Twitter Storm 序列化

                    序列化  这篇文章是关于序列化方法在storm 0.6.0版及之前版本中是如何工作的。0.6.0版之前,storm使用一种不同的序列化方法,参见Serialization (prior to 0.6.0)。   元组可由任何一种类型的对象组成。由于storm是一个分布式系统,当对象在任务之间传递时,它需要知道如何序列化和反序列化这些对象。    Storm使用  Kryo进行序列化。Kryo是一个
                

Hadoop 序列化的研究

                    Hadoop和java自带的序列化机制不同,它自己提供了一组序列化体系接口和类。 对于基本数据类型,Writable接口就代表了可以被序列化的数据,这个接口定义了2个方法,其中write方法可以吧这个数据序列化到参数给出的DataOutput的字节数组中,而readField方法则可以从DatInput中读取被序列化后的字节数组,并且反序列化为Hadoop数据:     publicinterfa
                

Jackson对象序列化/反系列化

                    
                

JSON部分序列化(二)

                    当序列化.Net对象为Json对象时经常会遇到的一个问题是:最终的Json包含大量多余的属性和属性值。这个问题在返回Json到客户端时显得特别重要。Json越大意味着需要更大的带宽,使网速变得更慢。 为了解决多余的Json这个问题,Json.Net有一系列内置的选项可以进行调整。 ->JsonIgnoreAttribute and DataMemberAttribute 默认情况下,在Jso
                

Hadoop序列化文件SequenceFile

                    Hadoop序列化文件SequenceFile主要用于解决大量小文件问题,SequenceFile是Hadoop API提供的一种二进制文件支持。这种二进制文件直接将<key,value>对序列化到文件中,一般对小文件可以使用这种文件合并,即将文件名作为key,文件内容作为value序列化到大文件中。 理解点: 1、二进制数据格式,在hadoop上进行mr任务时使用,一般是中间过程mr
                

【原】storm源码之巧用java反射反序列化clojure的defrecord获取属性值

                    storm源码是clojure、java、python的混合体。在解决storm-0.8.2的nimbus单点问题的过程中需要从zookeeper上读取目前storm集群中正在运行的assignments信息,以获取其代码在nimbus机器上的绝对路径(PS:通过java代码实现自定义的storage)。 assignments信息可以通过CuratorFramework框架的客户端读取zooke
                

Java静态变量的序列化

                    静态变量序列化问题代码  清单 2 public class Test implements Serializable {  private static final long serialVersionUID = 1L;  public static int staticVar = 5;  public static void main(String[] args) { try { //初始时s
                

XStream 对象流序对XML序列化或反系列化

                    
                

自定义Hadoop的可序列化类

                    Java原生语言中要想一个自定义类可序列化,很简单,只要让这个类实现java.io.Serializable接口就可以了,但是在Hadoop框架中,要想让自定义类可以被序列化,我们必须手动让其实现WritableCompable接口并且实现write(),readFields(),compareTo()方法。 下面就是一个我们自定义的可序列化的类:     /*  */  packagecom.c
                

groovy解析的类实例序列化后无法readObject

                    package com.cmbchina.cc.rule.script;  import groovy.lang.Binding;  import groovy.lang.GroovyClassLoader;  import groovy.lang.GroovyShell;  import java.io.FileInputStream;  import java.io.FileNotFoundE
                

Json.Net学习笔记(十三) 缩小序列化Json的大小

                    当序列化.Net对象为Json对象时经常会遇到的一个问题是:最终的Json包含大量多余的属性和属性值。这个问题在返回Json到客户端时显得特别重要。Json越大意味着需要更大的带宽,使网速变得更慢。  为了解决多余的Json这个问题,Json.Net有一系列内置的选项可以进行调整。 ->JsonIgnoreAttribute and DataMemberAttribute  默认情况下,在J
                

最新教程

更多

构建Disruptor实例-生产消费模型完成整个入门示例

                    初始化Disruptor,构建Disruptor只要需要以下几个参数:1 eventFactory: 消息(event)工厂对象,2 ringBufferSize: 容器的长度,​3 executor: 线程池(建议使用自定义线程池) RejectedExecutionHandler,​4 ProducerType: 单生产者 还是 多生产者, ​5 waitStrategy: 等待策略2、初始化好Disruptor之后,通过该对象的handleEventsWith添加消费者的监听。3、然后启动D...
                

数据生产者向disruptor容器RingBuffer中推送数据

                    RingBuffer是disruptor中不同的上下文(线程)之间传递数据的buffer,以下是数据生产者向disruptor容器RingBuffer中推送数据示例
                

数据消费者:实现EventHandler监听接口处理数据

                    实现EventHandler监听接口,重写onEvent方法处理数据
                

Disruptor实现EventFactory接口创建实例对象

                    创建具体实体类,实现 EventFactory 工厂类接口,重写newInstance方法,在此方法中创建对象
                

快速了解Sentinel 如何使用

                    从定义资源、流量控制规则、熔断降级规则、系统保护规则、访问控制规则、热点规则、查询修改规则、异常和监控等方面快速了解Sentinel 如何使用
                

Sentinel更新计划 Roadmap

                    Sentinel更新计划包括:注解支持、异步调用支持、热点参数限流、黑白名单功能、集群限流、与更多主流框架适配、与更多的数据源适配、Reactive 支持、指标/监控 API 标准化、高版本 Java 适配(JDK 11)、Service Mesh 支持、多语言支持(集群限流客户端)、智能化、自适应限流
                

Sentinel快速入门

                    提供 本地运行 demo 和 公网 demo 来帮助新手快速入门Sentinel。这两种方式都只需要您执行2到5个步骤。