java中通过tcp的Arraylist?

java中通过tcp的Arraylist?,java,arrays,tcp,client,Java,Arrays,Tcp,Client,在Java中如何通过tcp发送arraylist? 我需要发送一个整数数组列表,从客户端到服务器,反之亦然 Thanxx查看序列化。Java的ArrayList对象已经实现了serializable接口,所以您只需要学习如何使用它 该示例演示了如何将ArrayList写入文件,但同样的概念也适用于通过套接字发送。Java的ArrayList对象已经实现了serializable接口,所以您只需要学习如何使用它 该示例显示了如何将ArrayList写入文件,但同样的概念也适用于通过套接字发送它。最

在Java中如何通过tcp发送arraylist? 我需要发送一个整数数组列表,从客户端到服务器,反之亦然


Thanxx查看序列化。Java的ArrayList对象已经实现了serializable接口,所以您只需要学习如何使用它


该示例演示了如何将ArrayList写入文件,但同样的概念也适用于通过套接字发送。Java的ArrayList对象已经实现了serializable接口,所以您只需要学习如何使用它


该示例显示了如何将ArrayList写入文件,但同样的概念也适用于通过套接字发送它。

最简单的方法是:

序列化到字节[]或直接写入输出流,如Ryan所示 打开插座 在客户机中写入字节 在服务器上接收字节 反序列化字节[]或从流中读取,如Ryan所示
使用ObjectOutputStream和ObjectInputStream。您还可以使用commons lang SerializationUtils,它为您提供了一行程序进行序列化和反序列化。

最简单的方法是:

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.*;

public class SerializeOverSocket {

    private static ExecutorService executorService =
                    Executors.newSingleThreadExecutor();

    public static void main(String[] args) throws Exception {
        // Start a server to listen for a client
        executorService.submit(new Server());
        Thread.sleep(100);
        // Send an ArrayList from a client
        ArrayList<Integer> integers =
                    new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
        Socket s = new Socket();
        s.connect(new InetSocketAddress("localhost", 1234));
        ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
        out.writeObject(integers);
        s.close();
    }

    static class Server implements Runnable {
        public void run() {
            try {
                ServerSocket server = new ServerSocket(1234);
                Socket clientSocket = server.accept();
                ObjectInputStream in =
                        new ObjectInputStream(clientSocket.getInputStream());
                Object o = in.readObject();
                System.out.println("Received this object on the server: " + o);
                clientSocket.close();
                server.close();
                executorService.shutdown();
            } catch (IOException e) {
                // TODO: Write me
                throw new UnsupportedOperationException("Not written");
            } catch (ClassNotFoundException e) {
                // TODO: Write me
                throw new UnsupportedOperationException("Not written");
            }
        }
    }
}
序列化到字节[]或直接写入输出流,如Ryan所示 打开插座 在客户机中写入字节 在服务器上接收字节 反序列化字节[]或从流中读取,如Ryan所示
使用ObjectOutputStream和ObjectInputStream。您还可以使用commons lang SerializationUtils,它为您提供了一行程序进行序列化和反序列化。

我知道这是一个非常古老的问题,但也许Java lang的新版本使通过TCP发送对象比过去更容易。这比看起来要简单。签出以下示例:

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.concurrent.*;

public class SerializeOverSocket {

    private static ExecutorService executorService =
                    Executors.newSingleThreadExecutor();

    public static void main(String[] args) throws Exception {
        // Start a server to listen for a client
        executorService.submit(new Server());
        Thread.sleep(100);
        // Send an ArrayList from a client
        ArrayList<Integer> integers =
                    new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
        Socket s = new Socket();
        s.connect(new InetSocketAddress("localhost", 1234));
        ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
        out.writeObject(integers);
        s.close();
    }

    static class Server implements Runnable {
        public void run() {
            try {
                ServerSocket server = new ServerSocket(1234);
                Socket clientSocket = server.accept();
                ObjectInputStream in =
                        new ObjectInputStream(clientSocket.getInputStream());
                Object o = in.readObject();
                System.out.println("Received this object on the server: " + o);
                clientSocket.close();
                server.close();
                executorService.shutdown();
            } catch (IOException e) {
                // TODO: Write me
                throw new UnsupportedOperationException("Not written");
            } catch (ClassNotFoundException e) {
                // TODO: Write me
                throw new UnsupportedOperationException("Not written");
            }
        }
    }
}
TCP连接的客户端:

TCP连接的服务器端:


我知道这是一个非常古老的问题,但也许新版本的JavaLang使通过TCP发送对象比过去更容易。这比看起来要简单。签出以下示例:

TCP连接的客户端:

TCP连接的服务器端:


哦,你把所有的鱼都给了他:我的回答只给了他一根鱼竿,a告诉他如何钓鱼哈!嗯,我想那是真的+这当然会为他节省很多时间,但他可能只是复制粘贴@试着在使用之前理解一下这个例子。这确实会节省我的时间,我非常感谢。@helloThere:就像波佐说的,确保你理解代码。其中有些东西之所以存在,是因为这是一个例子。哦,你把所有的鱼都给了他:我的回答只给了他一根鱼竿,a告诉他如何钓鱼哈!嗯,我想那是真的+这当然会为他节省很多时间,但他可能只是复制粘贴@试着在使用之前理解一下这个例子。这确实会节省我的时间,我非常感谢。@helloThere:就像波佐说的,确保你理解代码。其中有些东西之所以存在,是因为这是一个例子。我读了你上面关于鱼的评论,我的意思是:但问题是,我读了很多次《溪流》和《套接字》,我似乎永远都无法完全理解:我读了你上面的评论,关于鱼,我的意思是:但问题是,我读了很多次流和套接字,我似乎永远无法完全理解:抱歉,我无法访问网站:抱歉,我的粘贴出现了一些奇怪的情况,这里再次表示抱歉,我无法访问网站:抱歉,我的粘贴出现了一些奇怪的情况,这是阿吉安
//All the imports here
//...
public class Server {
    private ObjectInputStream in; //The input stream
    private ObjectOutputStream out; //The output stream
    private ServerSocket serverSocket; //The serverSocket

    public Server(){
        //Initialize all the members for your
        //Server class here
    }

    //Using your getData method create 
    //the array from the serialized string
    //sent by the client
    public void getData() {
        try {
            //Do a cast to transform the object
            //into the actual object you need
            //which is an Integer array
            int[] data = (int[]) in.readObject();
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}