java 通信问题

问题描述

需求: 客户端和服务端在网络上通信(不在一台机器),客户端需要传输一个Bean对象给服务端(这个Bean结构客户端和服务端都有),现在我的方案是TCP/IP发送Bean的toString码流,服务端构造一个新的Bean,获得码流后再进行解析,填充Bean的内容。问题: 有没有更好的方案可以实现?比如用java的序列号等。 问题补充:但是我知道java的序列化和反序列化应该是在本地传输上比较有优势,网络上面不知道能否实现?

解决方案

public static <T extends Serializable> byte[] getBytes(T obj) throws IOException {byte[] b = serialize(obj).toByteArray();return b;}private static <T extends Serializable> ByteArrayOutputStream serialize(T obj)throws IOException {ByteArrayOutputStream buf = new ByteArrayOutputStream();ObjectOutputStream oos = null;try {oos = new ObjectOutputStream(buf);oos.writeObject(obj);} finally {if (oos != null)oos.close();}return buf;}public static <T extends Serializable> T getObject(byte[] b) throws IOException,ClassNotFoundException {return deserialize(b);}private static <T extends Serializable> T deserialize(byte[] data, boolean compressed)throws IOException, ClassNotFoundException {ByteArrayInputStream in = new ByteArrayInputStream(data);ObjectInputStream ois = null;try {ois = new ObjectInputStream(in);return (T) ois.readObject();} finally {IOUtils.close(ois);}}
解决方案二:
显然地json就可以满足你要求~~~并且很好解释
解决方案三:
很适合用RMI
解决方案四:
1、你的客户端和服务端是用的什么通信协议;2、你说的很多通过java的对象序列化传输把对象序列化成流,然后获得网络连接的流输出到服务端,在服务端获得流读取并反序列化
解决方案五:
个人感觉用对象流来解决这个问题不是很好的解决办法,可以讲实体装换成报文:例如:class a {private String id;private String name;get/set……public String toString(){return "<id>name</id><name>name</name>";}}个人觉得这样的通用性很强。
解决方案六:
序列化当然可以,通信方式首选RMI
解决方案七:
用PB序列化吧,传输效率更高,而且可以生成对象的javabean代码,很方便的。如果跟C++通信,最好是使用PB这样的框架了。
解决方案八:
为什么不用hessian呢?
解决方案:
两个程序都是java的,如果对性能要求不是很高,RMI当然是首选!如果对性能要求高,我推荐用jackson进行编解码。我们自己的系统做过jackson的性能压力,用他做序列化性能可以达到 12000/秒,基本很多序列化的框架都被秒杀了。
解决方案:
1.用java的对象流,ObjectOutputStream等.2.通过特定个格式传递数据,例如:xml.json等,客户端解析。推荐方法2,假如客户端改变了(用其他语言实现),不用修改服务端代码,只需要遵守相关格式就可以。
解决方案:
让Bean实现Serializable接口,使用对象流来处理。
解决方案:
序列化用Jackson反序列化: String json = "{x:1,"userId":"112",element:[{id:'123',name:'haha'},{id:'456',name:'hehe'}]}"; JSONObject o = JSONObject.fromObject(json); Map<String, Class> m = new HashMap<String, Class>(); m.put("x", Integer.class); m.put("userId", String.class); m.put("element",String[].class); Jsontobean b = (Jsontobean) JSONObject.toBean(o, Jsontobean.class, m); Object bean = JSONObject.toBean( o ); System.out.println("x: " + b.getX()); System.out.println("userId: " + b.getuserId());
解决方案:
网络上同样可以java 序列化。效率更高。
解决方案:
在传递之前将Bean转化为Json格式,在网络传输Json的字符串流,在另一端接收到Json流之后反解析即可。Json的组件建议使用Jackson的。

时间: 2024-09-19 20:58:37

java 通信问题的相关文章

Flex与Java通信框架搭建的步骤

Flex与Java通信框架搭建的步骤: 1. 新建web项目,并启动tomcat运行,检查一切是否正常(必须); 2. 导入所需的jar包(我已给出),将需要用的四个XML资源文件:messaging-config.xml,proxy-config.xml,remoting-config.xml,services-config.xml全部复制粘贴到项目的WEB-INF文件夹下,如下图所示: 3. 修改web.xml文件:将如下内容全部粘贴到web.xml中,不需做任何的更改即可; flex.cl

c++ 编程问题-c++与java通信(socket TCP)c++用的默认的编码,java用的UTF-8 怎么解决中文乱码问题

问题描述 c++与java通信(socket TCP)c++用的默认的编码,java用的UTF-8 怎么解决中文乱码问题 c++代码如下,谁可以试着尝试一下,谢谢 #include #include #include #pragma comment(lib,"ws2_32.lib") void main() { //创建套接字 WORD myVersionRequest; WSADATA wsaData; myVersionRequest=MAKEWORD(1,1); int err;

配合认证的JAVA通信程序

问题描述 我是一个初学者,现在正在编写一个配合认证的基于JAVA套接字的通信程序.老师要求:终端1和终端2要进行通信,必需通过第三台机器的简单认真.哪位高手帮帮忙吧!

JAVA通信编程(三)——TCP通讯

继上一篇小插曲之后继续回到正题,本篇讲述的是java的TCP通讯.TCP编程分为server端和client端,一般在网上都能搜到相关的例子,为了方便大家,我这里先整理下server端和client端的应用案例,然后再根据在本系列中第一篇串口通讯中的结构一样实现CommBuff接口. java tcp socket编程server端: import java.io.*; import java.net.*; import java.applet.Applet; public class Talk

几种java通信(rmi,http,hessian,webservice)协议性能比较

一.综述 本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的通讯协议,稳定高效,是EJB的基础.但它只能用于JAVA程序之间的通讯.Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口.协议的规范公开,可以用于任意语言.Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间的

JAVA通信编程(二)——如何读取java的properties配置文件(插播)

如何读取java的properties配置文件本不属于java通讯编程这个系列的范畴,但是在做一些应用中编写通讯编程需要读取一些通讯参数,这样可以使程序更加的通用化.并且博主在读取properties文件中遇到了点小坑,在这里说明一下,防止各位读者遇到同样的麻烦. 其实问一下度娘,就有很多信息关于如何读取java的properties配置文件的,这里我做一下小封装. package com.zzh.comm; import java.io.BufferedInputStream; import

JAVA通信编程(四)——UDP通讯

经过TCP和串口通讯编程的了解,相信大家应该掌握CommBuff的套路了,这里首先展示的是通过UDP编程的方式实现CommBuff接口,之后通过简单工厂模式的应用说明如何屏蔽底层通讯差异. UdpImpl类如下: package com.zzh.comm; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;

flex+java 通信 怎么调用不到java的方法

问题描述 就是一个很简单的heollword的例子 开始我能调用java方法 可是后来我怎么也调用不到java方法了.在此谢谢了但是我在别的机器上发布了 测试可以调用java方法 为什么我的机器不能.FirstJavaFlex.mxml 文件代码 <?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml&qu

Socket编程 php 与 java 通信 问题

问题描述 服务器端用java线程写Socket备注:其他无关代码不发了,主要部分发下System.out.println("Socket["+this.server_id+"]connectionsuccess.");PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(this.server_socket.getOutputStream())),true);out.println