从PC发送到PC,从PC发送到Android时,字节数组读取不一致

时间:2017-10-14 20:34:05

标签: java android arrays sockets jpeg

我的PC上有一个服务器应用程序,它读取一个jpg文件并通过套接字发送到Android设备。问题是当android设备收到字节数组时,它无法转换为位图。我创建了一个PC应用程序来接收相同的数组,并且收到的数据与Android上的数据不同,即使我使用相同的代码来接收它。

因此,我的假设是我在某种程度上需要在android上以不同的方式阅读它。

PC Java服务器

        ServerSocket serverSocket = new ServerSocket(PORT);
        Socket clientSocket = serverSocket.accept();

        BufferedImage image = ImageIO.read(new File("D:\\test1\\test.jpg"));
        ByteArrayOutputStream byteArrayoutputStream = new ByteArrayOutputStream();
        ImageIO.write(image,  "jpg", byteArrayoutputStream);
        OutputStream outputStream = clientSocket.getOutputStream();

        byte[] size = ByteBuffer.allocate(4).putInt(byteArrayoutputStream.size()).array();
        outputStream.write(size);
        outputStream.write(byteArrayoutputStream.toByteArray());
        outputStream.flush();

        Thread.sleep((long)5000);
        clientSocket.close();

Android接收器

    DataInputStream inputStream = new DataInputStream(serverSocket.getInputStream());

    byte[] sizeAr = new byte[4];
    inputStream.read(sizeAr);
    int size = ByteBuffer.wrap(sizeAr).asIntBuffer().get();

    byte[] imageAr = new byte[size];
    inputStream.read(imageAr);
    System.out.println(imageAr.toString());
    bMap = BitmapFactory.decodeByteArray(imageAr, 0, imageAr.length);//this returns null

1 个答案:

答案 0 :(得分:0)

你可能没有收到整件事, 代替:

 inputStream.read(imageAr);

尝试:

 inputStream.read(imageAr, 0, size);

第二种形式将一直等到收到大小字节。

<强> ADDED

在第一次阅读()

时也这样做

代替:inputStream.read(sizeAr);尝试inputStream.read(sizeAr, 0, 4);

同时获取并检查inputStream.read()返回值,它表示实际读取了多少字节。