当从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()的返回值,它说多少字节真的被读取。
不幸的是没有帮助,仍然得到了完全相同的字节数组。 –