如何在java中通过套接字发送长度为1 MB的数据缓冲区。 我究竟在做什么,我想计算网络的上传速度。为此我想将1 MB数据发送到我用C写的服务器。
在接收和发送数据的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的整个缓冲区。
答案 0 :(得分:1)
您的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)
直接发送一个字节数组,这可能是实现你想要的最直接的方法。