微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Java服务器向Android客户端发送图像会在inputStream中留下字节

如何解决从Java服务器向Android客户端发送图像会在inputStream中留下字节

如上所述,我正在尝试将图像从Java服务器发送到Android客户端。它使用的是Base64,但对我来说只能与png一起使用,但这对我来说太慢了,所以我想用jpg来尝试。

我使用了字节数组,我知道您必须先发送大小,然后发送实际的图像,

现在发生的是,我第一次发送图像时,发送的尺寸正确,并且图像(相对)正确显示。但是,当图像太大时(请记住,传达的尺寸仍然正确),某些图像会被剪切掉。它还没有被传输,但是android客户端随其所用。问题是,丢失的字节仍然以某种方式存在于InputStream中,因此下次我尝试下载图像时,大小为waaaaaayyyyyy,有时为负数。我假设最后一张图像的丢失字节只是添加到第二张图像的size-Bytes前面,这会使程序崩溃。

我尝试在不同的时间和不同的时间休眠线程,这会产生影响,但不能完全解决问题。如果有人知道,我将如何安全地删除持久字节,甚至更好,这会有所帮助,以便显示完整的图像,并且客户端不仅仅继续处理一半的字节。

这是客户正在考虑的方法

{
out.println("screenshot");
Log.d("screenshot","try getting screenshot");

InputStream is = s.getInputStream();

byte[] sizeAr = new byte[8];

is.read(sizeAr);

int size = ByteBuffer.wrap(sizeAr).asIntBuffer().get();
                                
Log.d("screenshot","size: " + size);

//thread.sleep(600);

byte[] imageAr = new byte[size];

//thread.sleep(600);

is.read(imageAr);

//thread.sleep(600);

final Bitmap decodedBitmap = BitmapFactory.decodeByteArray(imageAr,size);

//...and display of image
}

这是服务器代码


image = ImageIO.read(new File("./res/testimage.jpg"));

OutputStream outputStream = socket.getoutputStream();
                        
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(image,"jpg",byteArrayOutputStream);
                        
byte[] result = byteArrayOutputStream.toByteArray();
                    
//os.writeBytes("size coming."+ "\n");
//os.flush();
                        
byte[] size = ByteBuffer.allocate(8).putInt(result.length).array();
outputStream.write(size);
                        
System.out.println("size: " + result.length);
                    
//thread.sleep(500);
                    
outputStream.write(result);
                    
thread.sleep(500);
                    
//outputStream.flush();

这大致就是图像的外观。 (此后,下次我按屏幕截图时,应用程序崩溃) 提前非常感谢:)

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。