我如何在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)
直接发送字节数组,这可能是实现所需内容的最直接方法。