我如何在Java中通过套接字发送长度为1 MB的数据缓冲区。
我到底在做什么,我想计算网络的上传速度,为此我想向用C语言编写的服务器发送1 MB数据。

在C语言中,接收和发送数据的功能类似于send and recv,通过传递要发送的字节数,我们可以通过该函数发送所需的字节数。

send(connfd , client_message , `Bytes to send`, 0);

但在Java中,我一次只能发送1个字节
int buffer[] = new int[1048576];
PrintWriter output1 = new PrintWriter(socket.getOutputStream(), true);
output1.print(buffer[1]);

因此,要发送多个字节,我需要一次又一次调用上述函数。有什么办法可以让我继续传递1048576的整个缓冲区。

最佳答案

您的PrintWriter具有print(char[] s)方法(see doc)。因此,您可以改为创建一个具有相应大小的新char数组(注意:Java中的char为2字节长),然后使用该方法发送该char数组。

但是有一个更好的选择:查看the doc告诉我们我们从套接字中获得了OutputStream。我们可以将其包装到BufferedOutputStream中,如下所示:

BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
byte buffer[] = new byte[1024*1024];
bos.write(buffer, 0, buffer.length);

然后使用bos.write(byte[], int, int)直接发送字节数组,这可能是实现所需内容的最直接方法。

10-06 05:20
查看更多