我正在使用asyncTask通过套接字将图像从Android发送到PC。
我这样称呼它
new SendImage().execute(data);
其中数据的类型为byte[]
我的代码是
private class SendImage extends AsyncTask<byte[],Void, Void> {
@Override
protected Void doInBackground(byte[] ... data) {
try{
final DataOutputStream dataOutputStream;
final BufferedOutputStream out = new BufferedOutputStream(RRAWsecurity.socket.getOutputStream());
int count = data.length;
dataOutputStream = new DataOutputStream(RRAWsecurity.socket.getOutputStream());
dataOutputStream.writeInt(count);
dataOutputStream.flush();
out.write(data, 0, count);
out.flush();
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
}
问题在于这一行
out.write(data, 0, count);
错误说
The method write(byte[], int, int) in the type BufferedOutputStream is not applicable for the arguments (byte[][], int, int)
我无法弄清楚为什么要求2D
数组?
答案 0 :(得分:3)
使用data[0]
代替data
。 ...
表示法只是给定类型数组的一些语法糖。所以int...
实际上是一个int数组,你的byte...
被视为byte []数组的数组,所以它实际上是byte[][]
。
答案 1 :(得分:1)
替换:
int count =data.length; to int count =data[0].length;
out.write(data,0,count); to out.write(data[0],0,count);
数据是byte [] []。 byte [] ... data与byte [] [] data相同。
答案 2 :(得分:0)
您的字节数组(byte[]
)是一个维度参数,但BufferedOutputStream
的参数byte[][]
)是二维数组。关于阵列的不同维度是一个非常大的问题。您必须将数组byte
转换为二维数组。