从PC发送到PC以及从PC发送至Android时读取的字节数组不一致



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

因此,我的假设是,不知何故,我需要在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();

安卓接收器

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);

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

添加

也对第一次读取()执行相同操作

相反:inputStream.read(sizeAr);尝试inputStream.read(sizeAr, 0, 4);

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

最新更新