【问题标题】:ArrayList<Object> sending trought socket [duplicate]ArrayList<Object> 发送 trought 套接字 [重复]
【发布时间】:2014-11-27 20:13:53
【问题描述】:

我有一个 ArrayList。我已经用套接字连接了 Java Server 和 Android。如何将 ArrayList 从 Android 发送到 Java Server?

public class Person implements Serializable{
    private String name;
    private String number;

    public Person(String name, String nr){
        this.name = name;
        number = nr;

    }
    public String getName(){
        return name;

    }
    public String getNr(){
        return number;
    }

}

【问题讨论】:

  • 同一个问题不要问两次...
  • 是的,我知道,但是这个问题没有答案
  • 我浪费了 6 个小时,直到决定再次询问,这是一个很好的答案。
  • 上次你已经得到了这个问题的答案,而这次这个问题甚至不是一个真正的问题。你得到的错误在哪里?到目前为止你尝试了什么?您不能只指望这里有人为您解决问题。
  • Sice 这是一个标准问题,可以将链接发布给已经解决了该问题的人。这不是必须为他发明的新算法

标签: java android sockets arraylist


【解决方案1】:

创建一个 toString 和一个 fromString 方法。或者更好的是,使用 GSON。

Gson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。

http://code.google.com/p/google-gson/

【讨论】:

  • 抱歉,我把它和 Geo-JSON 混在一起了
  • Np m8 你能投票吗?如果你愿意?
  • 通信是在两个 Java 套接字之间进行的,而不是 Javascript 和基于 Java 的服务器。为什么使用 GSON 而不是 Java 序列化?
  • JSON 的一个优点是它是文本,并且可以从其他非 Java 系统读取,并且消息更容易调试,因为是人类可读的。 (还有 BSON)二进制 JSON,需要更少的字节。您可以节省资金,并且在易于调试人类可读消息时,项目会更快。这在很大程度上取决于项目。
  • 您将使用调试器无法调试的人类可读消息来调试什么?除非您要查看在套接字之间发送的实际数据包,否则总会有一个 java 对象供您自省。
【解决方案2】:

由于您的 Person 已经是 Serializabe,您可以在 byteArrayOutpuStream 之上使用 ObjectOutputStream。并传输字节数组。 如果您的服务器知道 Person 类(因为它链接了您的 jar)。它可以读取字节数组并调用ObjectInputStream。

例子:

List<Person> persons = new ArrayList<Persons>();
// TODO fill persons.

ByteArrayOutputStream bao = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bao);
oos.writeObject(persons);
oos.close();

byte[] byteToTransfer = oos.getBytes();
// transfer

在服务器端:

byte[] bytesFromSocket = ....;
ByteArrayInputStream bis = new ByteArrayInputStream(bytesFromSocket);
ObjectInputStream ois = new ObjectOutputStream(bis);
List<Persons> persons = (List<Persons>) ois.readObject(persons);

一旦你理解了这一点,看看一个更完整的代码,它的工作方式有点不同:

Java sockets - Custom Objects Sending

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多