前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串与Java对象的互转

字符串与Java对象的互转

作者头像
十玖八柒
发布2022-08-01 09:45:20
7620
发布2022-08-01 09:45:20
举报
文章被收录于专栏:ahzoo.cn的博客分享
  • 对象序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。
  • 序列化操作的对象需要实现Serializable或Externalizable,并且其内部所有属性也必须是可序列化的(String和StringBuilder类已实现了Serializable,基本数据类型默认可序列化),因为static和transient修饰的成员变量,不会被操作,所以不能序列化。
  • 一般都是把对象转为josn格式进行序列化

自定义类举例:

代码语言:javascript
复制
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Ahzoo implements Serializable {//需要将类实现Serializable或Externalizable才能进行对象的序列化操作
    //        实现Serializable接口后,需要提供一个long类型的全局常量,值可以任意数,但是必须声明,反序列时会进行对比,如果serialVersionUID一致,会认为是一致的,否则就会报序列号不一致的异常
    public static final long serialVersionUID = 7777777L;{
    private Integer age;
    private String name;
    private Account account;
    
}


class Account implements Serializable{//Account作为Person类的属性,也必须是可进行序列化的才行
    public static final long serialVersionUID = 999999999L;
    int id;
    public Account(int id){
        this.id = id;
    }

}

FastJSON

引入依赖:

代码语言:javascript
复制
<!--		json与对象互转-->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.49</version>
</dependency>

测试使用:

代码语言:javascript
复制
import org.junit.Test;
import com.alibaba.fastjson.JSON;
public class MethodTest {
	@Test
  public void toTest {
        //转成json字符串
        String json = JSON.toJSONString(new StringBuilder("ahzoo"));
        System.out.println(json);
        //转成(StringBuilder)对象
        StringBuilder str = JSON.parseObject(json,StringBuilder.class);
        System.out.println(str);
    		//转成(StringBuilder)列表
        List<StringBuilder> = JSONObject.parseObject(json, new TypeReference<List<StringBuilder>>() {
        });
    		//转为Map
    		List<Map<String, Object>> listMap = JSON.parseObject(json, new TypeReference<List<Map<String,Object>>>(){});  
  }

Jackson

代码语言:javascript
复制
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.7</version>
</dependency>

测试使用:

代码语言:javascript
复制
import org.junit.Test; 
import com.fasterxml.jackson.core.JsonProcessingException;

public class MethodTest {
  @Test
  public void toTest {

			ObjectMapper objectMapper = new ObjectMapper();
            try {
                //转为JSON
                String json = objectMapper.writeValueAsString(new StringBuilder("ahzoo"));
                //转为对象
                StringBuilder str = objectMapper.readValue(json, StringBuilder.class);
                //转为List
                List<StringBuilder> = objectMapper.readValue(fileString, new TypeReference<List<StringBuilder>>() {
                });
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
  }
}

Gson

代码语言:javascript
复制
<dependency>
 <groupId>com.google.code.gson</groupId>
 <artifactId>gson</artifactId>
 <version>2.8.5</version>
</dependency>

测试使用:

代码语言:javascript
复制
import com.google.gson.Gson;
import org.junit.Test; 

public class MethodTest {
    @Test
    public void toTest {
		//转成json字符串
        Gson gson = new Gson();
        String json = gson.toJson(new StringBuilder("ahzoo"));
        System.out.println(json);

		//json字符串转成对象
        StringBuilder str = gson.fromJson(json,StringBuilder.class);
        System.out.println(str);

		//转为list
        List<StringBuilder> list = gson.fromJson(json, new TypeToken<List<StringBuilder.class>>() {
        }.getType());

    }
}

后记

使用FastJSON序列化时,栈内存溢出: 原因:需要被反序列化的实体类继承了一个类(DataEntity),该类中的一个递归方法陷入了死循环,最终导致栈内存溢出

图片
图片

经过多方调试后发现,类()中的()方法的属性在递归中一直都是,最终导致栈内存溢出。(我的)解决方法:将替换为 currentUser

图片
图片
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FastJSON
  • Jackson
  • Gson
  • 后记
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档