java的序列化和反序列化_ObjectInputstream/ObjectOutputstream 、 JSON

序列化: 将数据结构或对象转换成二进制字节流序列存到磁盘或者发送到网络节点的过程。

反序列化:将在序列化过程中所生成的二进制字节流字节序列转换成数据结构或者对象的过程,这样就可以从磁盘或者网络节点中读取系列化的对象。

Java提供了内置的序列化和反序列化机制,主要通过实现java.io.Serializable接口来实现序列化,通过ObjectInputStream类和ObjectOutputStream类来实现反序列化。

这里有Employee类实现了 Serializable接口如下:


class Employee implements Serializable {
    public String name;
    public int age;

}

那么我就可以进行如下方操作

在磁盘上的序列化和反序列化

        这里可以先给实现化Employee对象属性赋值,并将其存入磁盘文件,该文件可以是txt、ser或者其他类型的文件,然后可以用反序列化取出来,这里只展示关键的属性代码

FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(e);
out.close();
fileIn.close();
FileInputStream fileIn = new FileInputStream("/tmp/employee.ser"); 
ObjectInputStream in = new ObjectInputStream(fileIn);
e = (Employee) in.readObject();
in.close();
fileIn.close();

Java的序列化还有其他操作比如:

在网络节点上的序列化和反序列化

//服务器向客服端发送Massage类对象,读取客服端发来的User类对象
ServerSocket ss = new ServerSocket(9999);

Socket socket = ss.accept();

ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());

 //客服端发来user对象,User也为为实现Serializable接口自定义的类
User u= (User) ois.readObject(); 

oos.writeObject(message);

//Message为实现Serializable接口的自定义类
Message message=(Message) ois.readObject();  

//链接到服务器发送User类对象,读取Message类对象
Socket socket = new Socket (InetAddress.getByName("127.0.0.1"),9999);

ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());

//发送user对象
oos.writeObject(user); 

//读取从服务器的得到的Message对象 (合法服务返回MESSAGE_LOGIN_SUCCEED属性)
ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());

Message ms=(Message)ois.readObject();  //出现异常


JSON字符串序列化成对象,对象序列化成JSON字符串

    引入maven依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

    json转换成对象

String jsonUser = "{name:'小明',userid:11}";  //json字符串
Student student = JSON.parseObject(jsonUser, User.class);  //这里的User.class包含name和userid属性

  对象转换成json

 String s = JSON.toJSONString(user); //user为一个实例

 String str2 = "{\"name\":\"Yolo\",\"Address\":\"Beijing\", \"data\":{\"id\": 123}}";
 JSONObject jsonObject2 = JSON.parseObject(str2);
 System.out.println(jsonObject2.getString("data"));                                    
 System.out.println(JSON.parseObject(jsonObject2.getString("data")).getString("id"));

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值