java–InputStream.bytesRemaining小于应该

java–InputStream.bytesRemaining小于应该,第1张

概述我有来自十几个来源的一堆图像,我正在后台线程下载它们.大多数图像都是在没有问题的情况下下载的,但有2个源会导致问题.他们的所有图像都无法加载.我使用以下代码下载(和存储)图像:Filef=newFile(cacheDir,urlHash);Bitmapbitmap=null;InputStreamis=newURL(url).openStr

我有来自十几个来源的一堆图像,我正在后台线程下载它们.大多数图像都是在没有问题的情况下下载的,但有2个源会导致问题.他们的所有图像都无法加载.

我使用以下代码下载(和存储)图像:

file f=new file(cacheDir, urlHash);Bitmap bitmap=null;inputStream is=new URL(url).openStream();OutputStream os = new fileOutputStream(f);Utils.copyStream(is, os);os.close();bitmap = BitmapFactory.decodeStream(new fileinputStream(f), null, null);

Utils.copyStream:

public static voID copyStream(inputStream is, OutputStream os){    int counter = 0;    final int buffer_size=1024;    try    {        byte[] bytes=new byte[buffer_size];        for(;;)        {          int count=is.read(bytes, 0, buffer_size);          if(count==-1) {              Log.d("tag", counter + " bytes copIEd");              break;          }          os.write(bytes, 0, count);          counter += count;        }    }    catch(Exception ex) {        ex.printstacktrace();    }}

当我尝试下载此图像http://www.zapakatel.cz/static/deal/7193-1057b.jpg而不是失败. BitmapFactory.decodeStream返回NulL.所有我能找到的可能导致问题的是is.bytesRemaining缺少几千字节:162721 vs 179845根据下载的文件大小.当我从该URL手动下载图像并将其上传到其他地方时,一切正常.

知道什么可能导致问题吗?托管此图像的服务器是否有可能在下载完成之前将我切断?这个图像在任何PC甚至在我的iPhone应用程序中加载都很好(我知道这是完全不同的平台,它可能并不重要,我只觉得它很奇怪)

解决方法:

我完全没有使用AndroID的经验,但这个问题似乎与响应的GZIP编码有关.

您指向的文件将返回并应用GZIP编码. 162721字节是编码数据的大小,179845是解码后的大小,您可以使用任何http检查器进行检查.看起来新的URL(url).openStream()不会自动解码GZIP编码的响应.

总结

以上是内存溢出为你收集整理的java – InputStream.bytesRemaining小于应该全部内容,希望文章能够帮你解决java – InputStream.bytesRemaining小于应该所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1109326.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存