通过套接字发送对象

时间:2012-02-22 23:16:59

标签: java xml sockets serialization network-programming

我过去唯一的插件编程是简单的文本流。我想知道什么是通过套接字发送类似Java对象的最有效方法。

例如,如果我有以下Employee类(Dependent将是一个由依赖的信息组成的简单类):

public class Employee {
    private String name;
    private double salary;
    private ArrayList<Dependent> dependents;
}

我是否应该使Employee对象Serializable并通过套接字发送实例。或者我应该写一个包含Employees信息的xml文件并发送?任何指导将不胜感激。还是有一些完全不同的更好的方式?谢谢!

3 个答案:

答案 0 :(得分:3)

如果您只发送Java JVM之间的数据,则可以选择其中一种。

文本表示(XML,JSON或自定义)有几个优点:

  • 使Java与其他语言之间的互操作更容易
  • 面对版本更改或插槽两端的代码版本略有不同,它不那么脆弱
  • 测试和调试非常容易

根据格式的不同,它可能会慢一点,但这通常不显着。

答案 1 :(得分:3)

如果您不一定要使用XML,那么您也可以尝试使用JSON。 google-gson库使这非常简单。要序列化代码,它很简单: -

Employee employee = new Employee();
...

Gson gson = new Gson();
String json = gson.toJson(employee);

并在另一端反序列化String: -

String socketDataAsString = null;
...<read from socket>...

Gson gson = new Gson();
Employee employee = gson.fromJson(socketDataAsString, Employee.class);

答案 2 :(得分:0)

如果必须直接使用低级套接字,有几种方法可以实现。您可以将其转换为文本格式并发送字节,然后在另一侧重新构建它。如果您的对象是可序列化的,您可以通过套接字发送它们(http://www.rgagnon.com/javadetails/java-0043.html)。

如果您有一定的灵活性,您也可以使用RMI进行远程交互。