问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java反序列求助大神

发布网友 发布时间:2022-05-26 05:57

我来回答

5个回答

热心网友 时间:2024-10-25 21:26

序列化:将java对象转换为字节序列的过程叫做序列化
反序列化:将字节对象转换为java对象的过程叫做反序列化
通常情况下,序列化有两种用途:、
1) 把对象的字节序列永久的保存在硬盘中
2)在网络上传输对象的字节序列
相应的API
  java.io.ObjectOutputStream
          writeObject(Object obj)
  java.io.ObjectInputStream
          readObject()
只有实现了Serializable或者Externalizable接口的类的对象才能够被序列化。否则当调用writeObject方法的时候会出现IOException。
需要注意的是Externalizable接口继承自Serializable接口。两者的区别如下:
  仅仅实现Serializable接口的类可应采用默认的序列化方式。比如String类。
    假设有一个Customer类的对象需要序列化,如果这个类仅仅实现了这个接口,那么序列化和反序列化的方式如下:ObjectOutputStream采用默认的序列化方式,对于这个类的非static,非transient的实例变量进行序列化。ObjectInputStream采用默认的反序列化方式,对于这个类的非static,非transient的实例变量进行反序列化。
    如果这个类不仅实现了Serializable接口,而且定义了readObject(ObjectInputStream in)和 writeObject(ObjectOutputStream out)方法,那么将按照如下的方式进行序列化和反序列化:ObjectOutputStream会调用这个类的writeObject方法进行序列化,ObjectInputStream会调用相应的readObject方法进行反序列化。
  实现Externalizable接口的类完全由自身来控制序列化的行为。而且必须实现writeExternal(ObjectOutput out)和readExternal(ObjectInput in)。那么将按照如下的方式进行序列化和反序列化:ObjectOutputStream会调用这个类的writeExternal方法进行序列化,ObjectInputStream会调用相应的readExternal方法进行反序列化。
下面来看一个最简单的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

package com.java;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class simpleSerializableTest {
public static void main(String[] args) throws Exception {
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("d:\\objectFile.obj"));

String strObj="name";
Customer customer=new Customer("rollen");
//序列化,此处故意将同一对象序列化2次
out.writeObject(strObj);
out.writeObject(customer);
out.writeObject(customer);
out.close();
//反序列化
ObjectInputStream in=new ObjectInputStream(new FileInputStream("d:\\objectFile.obj"));
String strobj1=(String)in.readObject();
Customer cus1=(Customer)in.readObject();
Customer cus2=(Customer)in.readObject();<br>      in.close();
System.out.println(strobj1+": "+cus1);
System.out.println(strObj==strobj1);
System.out.println(cus1==customer);
System.out.println(cus1==cus2);
}
}

class Customer implements Serializable {
private static final long serialVersionUID = 1L;
private String name;

public Customer() {
System.out.println("无参构造方法");
}

public Customer(String name) {
System.out.println("有参构造方法");
this.name = name;
}

public String toString() {
return "[ "+name+" ]";
}

热心网友 时间:2024-10-25 21:26

public void testJSONToBeanHavaList(){
String json = "{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}";
// String json = "{list:[{name:'test1'},{name:'test2'}]}";
Map classMap = new HashMap();
classMap.put("list", Person.class);
MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);
System.out.println(diyBean);

List list = diyBean.getList();
for(Object o : list){
if(o instanceof Person){
Person p = (Person)o;
System.out.println(p.getName());
}
}
}

热心网友 时间:2024-10-25 21:27

for(int i=0;i<json.length;i++)

{
list.add(JSON.parseArray(json[i], SomeEntity.class))

}

热心网友 时间:2024-10-25 21:27

直接用TypeReference就可以了。

热心网友 时间:2024-10-25 21:28

目前gson还是阿里的解析工具,知道第一层,List<Object>,你只能取出每个元素然后强转了;
我知道有一个工具挺好使得xsteam这个,你可以去看一下;个人所知道的只有这么多了,也许有其他办法吧,等其他大神回复
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
你好。本人最近想入手个 本本 知道你是高手望给点高见 3K以内。 惠普(hp)hp431(qg643pa) 与联想(lenovo)g460al-ith(h)该买哪一... 惠普4核1G独立显卡2G-4G内存的笔记本电脑有哪些型号的比较好?价位是多... hp 431-qg597怎么样?惠普质量真很差吗?它的商务本怎么样 hp431 qg597无线上网卡插在那里? 惠普HP431(QG643PA)笔记本经常死机自动重启 陆金所 德众金融理财可靠吗? 平安为什么建陆金所 陆金所有什么风险吗 100分问题:请问汕头市区哪里有卖“节节风”的中草要。 大家好!在java中,怎么检测本地是否包含学生对象用反序列化……谢谢... 关于java对象的反序列化 java使用反序列化检测本地是否保存学生对象,如果保存则输出学生数据。如... 关于JAVA 反序列化的问题 怎样学习才会好? 奇迹世界sun 木瓜奇迹 满点会员战士法师和魔剑还有弓箭手怎么加点 求奇迹世界2龙骑士加点法! 弘扬真善美拒绝假丑恶600字作文 ...求解:奇迹世界2 赫尔隆 火龙谷套装 还有灵魂武器 白法师武器之类PK的... 脱离假丑恶,充满真善美 议论文800字 列举社会生活中的真善美的例子 身边的真善美与假丑恶 什么是真善美什么是假丑恶? 急求关于真善美和假恶丑的事例 《安徒生童话》故事里的真善美是什么? 对品牌发展的祝福语 真善美假丑恶作文四百字数 歌颂真善美抨击假恶丑的童话故事 真善美,做恶丑.例子 高中文科男生读专科学什么专业好? 男文科生上大专选什么专业比较好? 男孩子学文科的,上大学选个什么专业 较好呢 怎么才能跟上区块链的风口? 企业要在中芯区块链公共服务平台上链有哪些要求? cf战场模式怎么占领敌方控制台? 魔兽世界如何占领了望台 摩托车行驶证样本 营转非行驶证样本图片 喝生鸡蛋可以生发吗 魔兽世界燃烧的远征占领瞭望台任务怎么做 魔兽怎么占领了望台? 海虹哪个部位不能吃? 驴屎蛋能生发吗 魔兽世界怎么占领了望台,竞技场碎石岭啊 生发剂有效吗? “没有在等你 也没有在喜欢别人”这句话什么意思? 洞口电影院7月8日放什么电影 魔兽世界萨尔玛任务占领了望台怎么做 ? 明朝末年哪个国家占领我国台湾