【问题标题】:Inconsistent byte array read when sent from PC to PC and from PC to Android从 PC 发送到 PC 和从 PC 发送到 Android 时读取的字节数组不一致
【发布时间】:2017-10-14 20:34:05
【问题描述】:

我的 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

【问题讨论】:

    标签: java android arrays sockets jpeg


    【解决方案1】:

    您可能没有收到全部内容, 而是:

     inputStream.read(imageAr);
    

    尝试:

     inputStream.read(imageAr, 0, size);
    

    第二种形式将等到收到 size 字节。

    添加

    在第一次 read() 时也这样做

    改为:inputStream.read(sizeAr); 试试inputStream.read(sizeAr, 0, 4);

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

    【讨论】:

    • 不幸的是没有帮助,仍然得到完全相同的字节数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多