问题描述
需求: 客户端和服务端在网络上通信(不在一台机器),客户端需要传输一个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的。