Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList发送trought套接字_Java_Android_Sockets_Arraylist - Fatal编程技术网

Java ArrayList发送trought套接字

Java ArrayList发送trought套接字,java,android,sockets,arraylist,Java,Android,Sockets,Arraylist,我有一个ArrayList。我已经用一个套接字连接了Java服务器和Android。如何将ArrayList从Android发送到Java服务器 public class Person implements Serializable{ private String name; private String number; public Person(String name, String nr){ this.name = name; nu

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

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;
    }

}

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

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


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

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


由于您的人员已经序列化,您可以在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);
一旦您理解了这一点,请看一个更完整的代码,它的工作方式会有所不同:


由于您的人员已经序列化,您可以在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);
一旦您理解了这一点,请看一个更完整的代码,它的工作方式会有所不同:



同一个问题不要问两次……是的,我知道,但是这个问题没有答案,我浪费了6个小时,直到我决定再问一次,这是一个很好的答案。你上次已经得到了这个问题的答案,而这次这个问题甚至不是一个真正的问题。您得到的错误在哪里?到目前为止你尝试了什么?你不能指望这里有人能帮你解决这个问题。既然这是一个标准问题,你可以发一个链接到已经解决这个问题的人。这不是一个必须为他发明的新算法不要问同一个问题两次……是的,我知道,但是这个问题没有答案,我浪费了6个小时,直到我决定再问一次,这是一个很好的答案。你上次已经得到了这个问题的答案,而这次这个问题甚至不是一个真正的问题。您得到的错误在哪里?到目前为止你尝试了什么?你不能指望这里有人能帮你解决这个问题。既然这是一个标准问题,你可以发一个链接到已经解决这个问题的人。这不是一个必须为他发明的新算法,对不起,我混合了Geo JSONNp m8,你能投赞成票吗。如果你想,通信是在两个Java套接字之间进行的,而不是Javascript和基于Java的服务器之间。为什么要使用GSON而不是Java序列化?JSON的一个优点是它是文本,可以从其他非Java系统读取,并且消息更容易调试,因为它们是人类可读的。还有BSON二进制JSON,它需要更少的字节。您可以节省资金,并且当具有易于调试的人类可读消息时,priject会更快。这在很大程度上取决于项目。对于无法使用调试器调试的人类可读消息,您到底要调试什么?除非您要查看套接字之间发送的实际数据包,否则总会有一个java对象供您反思。啊,很抱歉,我将它与Geo JSONNp m8混为一谈,您可以投票赞成吗。如果你想,通信是在两个Java套接字之间进行的,而不是Javascript和基于Java的服务器之间。为什么要使用GSON而不是Java序列化?JSON的一个优点是它是文本,可以从其他非Java系统读取,并且消息更容易调试,因为它们是人类可读的。还有BSON二进制JSON,它需要更少的字节。您可以节省资金,并且当具有易于调试的人类可读消息时,priject会更快。这在很大程度上取决于项目。对于无法使用调试器调试的人类可读消息,您到底要调试什么?除非您要查看套接字之间发送的实际数据包,否则总会有一个java对象供您反思。