史诗级bug:io流下载图片打不开,提示文件不支持

您所在的位置:网站首页 图片文件不支持 史诗级bug:io流下载图片打不开,提示文件不支持

史诗级bug:io流下载图片打不开,提示文件不支持

2024-06-28 05:52| 来源: 网络整理| 查看: 265

先看代码

try { File file = new File("test.png"); FileOutputStream outputStream = new FileOutputStream(file); try{ int len; byte [] buffer = new byte[1024]; while((len = response.body().asInputStream().read(buffer))!= -1){ outputStream.write(buffer); } }finally { outputStream.close(); } }catch (IOException e) { e.printStackTrace(); }

此段代码经过本地测试可以正常复制图片,到服务器上执行后复制的图片就打不开了。 在这里插入图片描述 找了几个世纪的原因没找到,后来有人说 len么有初始化为0,试了一下还是不行,当我把代码改成如下的时候

try { File file = new File("test.png"); FileOutputStream outputStream = new FileOutputStream(file); try{ int len = 0; byte [] buffer = new byte[1024]; while((len = response.body().asInputStream().read(buffer))!= -1){ outputStream.write(buffer,0,len); } }finally { outputStream.close(); } }catch (IOException e) { e.printStackTrace(); }

奇迹般的可以了!!!

outputStream.write(buffer,0,len);

问题是 FileOutputStream 在最后一次写入的时候读取的buffer长度是多少 如果是len的话就没有问题,如果是buffer.lenth的话那为什么本地的图片可以复制成功? 源码是这样的:

public void write(byte b[]) throws IOException { writeBytes(b, 0, b.length, append); }

表示费解为什么本地的图片可以复制成功?



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3