大佬帮我看看为什么使用字节流照片还是显示不成功???

ぃ坠花湮゛ 2021-03-02 05:41:37
package dimo;


import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileOutputStream;
public class dome {


public static void main(String[]args) throws IOException{
//创建
FileInputStream ol = new FileInputStream("dimo/123.jpg");
FileOutputStream po = new FileOutputStream("dimo/a.jpg");
//循环
int len;
while ((len=ol.read())!=-1);{
po.write(len);
}
ol.close();
po.close();
}
}
...全文
190 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ぃ坠花湮゛ 2021-03-04
  • 打赏
  • 举报
回复
感谢大佬
冰思雨 2021-03-04
  • 打赏
  • 举报
回复
楼主仔细看看你的while循环
while ((len=ol.read())!=-1);{
        po.write(len);
    }
很明显,while条件后面,多了一个分号。 在Java语法中,while循环的循环体有两种情况: 1. 单个语句; 2. 多个语句构成的代码块。 先说多个语句的情况,多个语句构成的代码块,要用花括号括起来。这个代码块,不仅仅只适用于wile循环,if分支,switch分支,以及函数体内随便哪个地方,都可以写的。 再来说说单个语句,单个语句以分号结尾即可,最简单的情况就是空语句,只由一个分号构成。 那么,问题来了。楼主的while循环,由于while条件后面直接跟了一个分号,就变成循环体是个空语句了。后面的代码块不会进入循环结构,只会执行一次。 程序最终的执行结果,应该是"dimo/a.jpg"文件只写入了一个字节的数据,当然是无法正常打开的了,数据不全嘛。 另外,1楼的答案存在问题。楼主的用法是正确的,只是循环结构上面出了的小毛病。1楼推荐的数组形式的参数,其实就是Buffer形式的读写,与楼主的用法相比,无非就是效率高了几十倍而已,但是,结果是相同的。
小王子jvm 2021-03-02
  • 打赏
  • 举报
回复
(len=ol.read())这个方法读取的返回值是字节的整数,但是我们需要的是byte字节这个类型,传输过去当然就不是一个图片了,你换成read(byte[] byte)这个方法就好了,读取数据到byte数组中,再把这个写入另一个文件。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧