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

问题描述:

我的PC上有一个服务器应用程序,它读取一个jpg文件并通过套接字将其发送到android设备。问题是,当android设备收到一个字节数组时,它不能转换为位图。我创建了一个PC应用程序来接收相同的数组,并且收到的数据与android上的数据不同,即使我使用相同的代码来接收数据。当从PC发送到PC和从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 

你可能也不会接受了整个事情, 相反:

inputStream.read(imageAr); 

尝试:

inputStream.read(imageAr, 0, size); 

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

ADDED

而且做的第一个read()

,而不是相同的:inputStream.read(sizeAr);尝试inputStream.read(sizeAr, 0, 4);

还可以获得和检查inputStream.read()的返回值,它说多少字节真的被读取。

+0

不幸的是没有帮助,仍然得到了完全相同的字节数组。 –