在Android中通过Socket发送1 MB数据缓冲区

时间:2015-07-30 11:36:11

标签: java android sockets

如何在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的整个缓冲区。

1 个答案:

答案 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)直接发送一个字节数组,这可能是实现你想要的最直接的方法。