序列化和反序列化(七)——Java对象的网络传输(二)
《Java对象的网络传输(一)》中分别介绍了如何通过Socket和HTTP实现Java对象的网络传输,其实现原理如出一辙——将Java对象转换成二进制进行传输,这种方式要求项目工程必须是Java或Java Web工程,如果要将Java对象状态网络传输至C、C#等异构项目,或传至浏览器客户端,进而浏览器客户端解析为JavaScript对象,这种将Java对象转换成二进制进行传输的方式是无法实现的,为了解决这一问题通常将Java对象转换为XML或Json格式,接下来以HTTP协议为例演示如何转换为Json进而实现网络传输:
keeper Java Web工程:
UserInfo类:
package com.jd.vo;public class UserInfo{//没有实现Serializable接口private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
服务器端:
package com.jd.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.google.gson.Gson;
import com.jd.vo.UserInfo;@WebServlet("/DataServlet")
public class DataServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();UserInfo userInfo = new UserInfo();userInfo.setAge(20);userInfo.setName("Tom");String json = new Gson().toJson(userInfo);out.write(json);out.flush();out.close();}
}
venus Java工程:
UserInfo类:同keeper工程UserInfo类
客户端:
package com.jd.test;import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import com.google.gson.Gson;
import com.jd.vo.UserInfo;public class Test {public static void main(String[] args) {try {CloseableHttpClient httpclient = HttpClients.createDefault();HttpGet httpGet = new HttpGet("http://127.0.0.1:8080/keeper/DataServlet");// 创建http GET请求CloseableHttpResponse response = httpclient.execute(httpGet);// 执行请求if (response.getStatusLine().getStatusCode() == 200) {// 判断返回状态是否为200HttpEntity entity = response.getEntity();String json = EntityUtils.toString(entity);UserInfo userInfo = new Gson().fromJson(json, UserInfo.class);System.out.println(userInfo);}response.close();httpclient.close();} catch (Exception e) {e.printStackTrace();}}
}
注意:
上例中服务器端和客户端创建用于网络传输的Java对象类没有实现Serializable接口;
为了便于将Java对象转换为Json,第三方开源组织提供了很多jar包:
fastjson:
https://mvnrepository.com/artifact/com.alibaba/fastjson
gson:
https://mvnrepository.com/artifact/com.google.code.gson/gson
JackJson:
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
序列化和反序列化(七)——Java对象的网络传输(二)相关推荐
- 利用序列化与反序列化对Java对象进行深度复制
来源 http://lhg803.iteye.com/blog/407270 JDK的API中的java.lang.Object和Cloneable接口要完美实现深度clone时,都需要针对具体的类 ...
- Java对象序列化详解6,Java对象的序列化与反序列化详解
把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种途径: Ⅰ . 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中 Ⅱ. 在网 ...
- Android编程实战——仿微信群聊-2——对象的网络传输
Android编程实战--仿微信群聊-2--对象的网络传输 项目源代码移步github 上一章服务器端有个消息类MyMessage类没有细讲,这里就说一下MyMessage和更重要的网络中对象的传输( ...
- java反序列化多个对象_java 序列化与反序列化多个对象 抛出异常
jdk 1.8 IEDA 设置可以追加写入后,向目标文件序列化多个同一对象,再序列化出来时,因为反序列化时头部信息只读取一次,报出异常. 请问该怎么解决?或者代码写的有问题? import java. ...
- java对象序列化存储到文件、从文件中反序列化读取java对象
1.首先,对即将要操作的java对象的类需要实现序列化接口Serializable,代码如下: import java.io.Serializable; public class User imple ...
- 序列化和反序列化的几种方式(DataContractSerializer)(二)
DataContractSerializer 类 使用提供的数据协定,将类型实例序列化和反序列化为 XML 流或文档. 无法继承此类. 命名空间: System.Runtime.Serializati ...
- 自定义序列化和反序列化的java实现
2019独角兽企业重金招聘Python工程师标准>>> package j2se.IO;import java.io.*;/*** Created by jingqing.zhou ...
- 第二十五题:二叉树的序列化和反序列化(Java)
题目要求: 二叉树的数的序列化和反序列话,二叉树实际是存储在内存中的,一旦断电或者是关机,二叉树的数据就会在内存中丢失.所以我们需要将二叉树的数据保存下来,这个过程叫做持久化或者序列化:将二叉树的数据 ...
- 文件绑定java socket多线程网络传输多个文件Strut2教程-java教程
题记:写这篇博客要主是加深自己对文件绑定的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 由于要需究研了下用java socket传输文件,由于要需传输多个文件,因此,采用了多线程 ...
- Java 中序列化与反序列化
一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...
最新文章
- C语言结构体篇 结构体
- oracle构造过程实例
- matlab理想低通滤波器代码_自己动手,解开Matlab下AMD锐龙处理器性能封印
- 电缆桥架安装规范标准_电缆桥架怎么安装,桥架安装工艺分享
- KUKA通信 CREAD问题
- 3GPP(3rd Generation Partnership Project)
- Python+matplotlib绘制函数曲线查找函数极值
- android flag,Android 屏幕锁 - FLAG_KEEP_SCREEN_ON
- dubbo源码解析-spi(四)
- sap 双计量单位_SAP 基本计量单位更改(转载)
- 往事如烟 - 老钟15
- 雷军第二场直播带货圆满成功,雷军代言小米试用期一个月
- 一个量化交易策略师的自白_不安全设计师的自白
- 2022-12-05 新希望六和 一面笔试 (面经六)
- 微信表情图像代表什么意思_微信里的表情每个头像代表什么意思
- python24点计算器_24点计算器Python脚本
- 合同太厚骑缝章怎么盖_合同骑缝章应该怎么盖?.doc
- 海底捞市值超大多数上市房企,火锅是怎么做到比卖房还赚钱的?
- 达观数据曾彦能:如何用深度学习做好长文本分类与法律文书智能化处理
- 计算机网络8832号答案,年月份自学考试计算机网络原理答案36.doc