这是我在学习socket的时候遇到的问题。
要实现的功能是在客户端把一个对象传到服务器。
客户端用c#做。服务器用java做。
要传输的对象只有两个属性:一个userName 跟一个password 都是String类型。
两端都这个User类。内容一样。
实践时的流程是这样的:我在c#那边把对象序列化为xml字符串后通过socket发送到java这边。
java这边接收到xml字符串后 赋值给一个String变量,然后把变量给xstream的fromXml方法进行反序列化。
就在进行反序列化的时候抛异常了。
异常的大概内容好像是说我的xml字符串内容不能转为对象。
重点:
后来我直接把java这边接收到的xml字符串用system.out.println()在控制台输出,
然后把在控制台输出的xml字符串手工复制到xstream的fromXml方法里再执行却成功了。
问题出在哪里了?
有人跟我说过 在接收端这边接收到xml字符串之后自己用dom4j解析xml字符串内容再自己封装到接收端这边
的对象里。不要直接用xstream的fromXml。
但是我发现c#和java两边把对象序列化为xml字符串后xml字符串的内容是一样的。
这样的话c#这边发送的xml字符串应该是可以给java那边的xstream的fromXml进行反序列化的,
没必要自己手动去解析和封装。但是就出现上面说的问题。。。 郁闷~~~~
还有 用socket进行跨语言的对象传输 , 大家一般用的是什么办法?
接收端需要手动解析封装的吗?
如果大家有这方面的资料也请分享一下。
java 序列化 xstream socket xml
------解决方案--------------------
这种问题没有通解,要根据具体的实际需求分析,因地制宜才好!
按照你说的可以考虑WebService,这个比较适合你;
你也可以使用xml作为中间数据表示层在网络上进行交换,两边各自进行orm映射,比如jaxb等!
如果你交换的数据就是这么简单,而且也没有通用性的设计要求,那就直接拼接成一个定长报文更简单,更高效!