1

我正在使用 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数组?

4

3 回答 3

4

使用data[0]而不是data. 该...符号只是给定类型数组的一些语法糖。所以int...实际上是一个整数数组,你byte...被视为一个 byte[] 数组的数组,所以它实际上是byte[][].

于 2013-04-28T18:30:06.117 回答
2

代替:

int count =data.length;   to int count =data[0].length;
out.write(data,0,count);  to  out.write(data[0],0,count);

数据是字节[][]。byte[] ... 数据与 byte[][] 数据相同。

于 2013-04-28T19:24:46.110 回答
0

您的字节数组 ( byte[]) 是一维参数,但BufferedOutputStream's 参数byte[][]) 是二维数组。关于数组的不同维度是一个很大的问题。您必须将数组转换byte为二维数组。

于 2013-04-28T19:31:20.177 回答