Java 在Android中通过套接字发送1 MB的数据缓冲区

Java 在Android中通过套接字发送1 MB的数据缓冲区,java,android,sockets,Java,Android,Sockets,在java中,如何通过套接字发送长度为1MB的数据缓冲区。 我要做的就是计算网络的上传速度。为此,我要将1MB的数据发送到我用C编写的服务器 在C语言中,为了接收和发送数据,我们有类似于send和recv的函数,通过这些函数,我们可以通过传递要发送的字节数来发送所需的字节数 send(connfd , client_message , `Bytes to send`, 0); 但在java中,我只能使用 int buffer[] = new int[1048576]; PrintWriter

在java中,如何通过套接字发送长度为1MB的数据缓冲区。 我要做的就是计算网络的上传速度。为此,我要将1MB的数据发送到我用C编写的服务器

在C语言中,为了接收和发送数据,我们有类似于
send和recv
的函数,通过这些函数,我们可以通过传递要发送的字节数来发送所需的字节数

send(connfd , client_message , `Bytes to send`, 0);
但在java中,我只能使用

int buffer[] = new int[1048576];
PrintWriter output1 = new PrintWriter(socket.getOutputStream(), true);
output1.print(buffer[1]);

所以要发送多个字节,我需要反复调用上面的函数。有什么方法可以让我在运行中通过1048576的整个缓冲区。

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

但是有一个更好的选择:查看一下,我们会从套接字中得到一个
OutputStream
。我们可以把它包装成一个,像这样:

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

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

尝试使用java.nio包
byte[]数组=新字节[1*1024*1024];OutputStream os=socket.getOutputStream();写入(数组);os.flush();os.close()我认为有一个小错误:您的缓冲区将包含4MB的数据,因为您有1024*1024个整数,而整数本身占用4字节。