V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cxp
V2EX  ›  Java

Java 利用字节流复制图片时出现的小问题!

  •  
  •   cxp · 2018-05-27 22:57:25 +08:00 · 3586 次点击
    这是一个创建于 2407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    部分代码: /获取当前工程下的 pic.jpg 文件/

    file = new File("picture/pic.jpg"); /输出其大小/

    System.out.println(file.length()); /将文件利用 FileInputStream 读入到内存/ fis = new FileInputStream(file);

    File cp_file = new File("picture/cp_pic.jpg");

    fos = new FileOutputStream(cp_file);

    /封装到缓冲区/ bis = new BufferedInputStream(fis);

    bos = new BufferedOutputStream(fos);

    /字节数组存储信息/ byte[] bytes=new byte[1024];

    int temp=0;

    /判断是否读到文件结尾/

    while((temp=bis.read(bytes))!=-1){ //重复读取完成后利用输出流输出 bos.write(bytes); }

    /复制完之后的文件路径及大小/ System.out.println(cp_file.getAbsolutePath()); System.out.println(cp_file.length());

    当我把 byte[] bytes=new byte[1024]更改成为 byte[] bytes=new byte[4800]; 或者更高时,复制的图片字节数发生改变。但是图片没有看出失真的现象。 那么当我设置存储数组的值越低时,是否零存储越低,但不会失真。 请教这种说法对么?还是我的想法本来就是错误的?

    7 条回复    2018-05-31 16:59:51 +08:00
    ipwx
        1
    ipwx  
       2018-05-27 23:29:37 +08:00 via iPhone
    你没有 close bufferedwriter

    讲道理俩文件对拷不需要 buffered
    james2013
        2
    james2013  
       2018-05-27 23:38:04 +08:00   ❤️ 2
    楼主还是得好好学下 Java 基础. bos.write(bytes);在最后一次读取文件时,有效长度是 500,数组长度是 4800,而你把整个数组写进去文件了,后面的是无效数据.应该这么写 bos.write(bs,0,temp);
    wdlth
        3
    wdlth  
       2018-05-28 00:05:08 +08:00
    为何不用 nio 的复制呢?
    pomony
        4
    pomony  
       2018-05-28 02:48:09 +08:00 via Android
    赞成 2 楼,写数据的话,如果有效数据小于数组长度,会把数组后面空的数据写进去,所以长度有所不同,用带 offset 的方法进行控制,只写入有效长度
    whatisnew
        5
    whatisnew  
       2018-05-28 03:20:05 +08:00
    transfer
    yzmm
        6
    yzmm  
       2018-05-28 09:39:42 +08:00
    2 楼明显正解。。。应该是 fos.write(bytes,0,temp)
    Hippie
        7
    Hippie  
       2018-05-31 16:59:51 +08:00
    回炉深造
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2659 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 06:17 · PVG 14:17 · LAX 22:17 · JFK 01:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.