如何通过TCP连接发送字节数组(java编程)

2022-09-01 16:38:25

有人可以演示如何通过TCP连接将字节数组从发送程序发送到Java中的接收程序吗?

byte[] myByteArray

(我是Java编程的新手,似乎找不到如何做到这一点的例子来显示连接的两端(发送方和接收方)。如果您知道一个现有示例,也许您可以发布该链接。(无需重新发明轮子。附言:这不是家庭作业!:-)


答案 1

Java 中的 和 类以本机方式处理字节数组。您可能要添加的一件事是消息开头的长度,以便接收方知道预期的字节数。我通常喜欢提供一种方法,允许控制字节数组中要发送的字节,就像标准API一样。InputStreamOutputStream

像这样:

private Socket socket;

public void sendBytes(byte[] myByteArray) throws IOException {
    sendBytes(myByteArray, 0, myByteArray.length);
}

public void sendBytes(byte[] myByteArray, int start, int len) throws IOException {
    if (len < 0)
        throw new IllegalArgumentException("Negative length not allowed");
    if (start < 0 || start >= myByteArray.length)
        throw new IndexOutOfBoundsException("Out of bounds: " + start);
    // Other checks if needed.

    // May be better to save the streams in the support class;
    // just like the socket variable.
    OutputStream out = socket.getOutputStream(); 
    DataOutputStream dos = new DataOutputStream(out);

    dos.writeInt(len);
    if (len > 0) {
        dos.write(myByteArray, start, len);
    }
}

编辑:要添加接收端:

public byte[] readBytes() throws IOException {
    // Again, probably better to store these objects references in the support class
    InputStream in = socket.getInputStream();
    DataInputStream dis = new DataInputStream(in);

    int len = dis.readInt();
    byte[] data = new byte[len];
    if (len > 0) {
        dis.readFully(data);
    }
    return data;
}

答案 2

只需从“真正大索引”中的此示例开始。但请注意,它旨在传输和接收字符,而不是字节。不过,这没什么大不了的 - 你可以只处理该类提供的原始对象和对象。有关不同类型的读取器、写入器和流的详细信息,请参阅 API。您会感兴趣的方法是 和 。InputStreamOutputStreamSocketOutputStream.write(byte[])InputStream.read(byte[])


推荐