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

2018-05-27 22:57:25 +08:00
 cxp

部分代码: /获取当前工程下的 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]; 或者更高时,复制的图片字节数发生改变。但是图片没有看出失真的现象。 那么当我设置存储数组的值越低时,是否零存储越低,但不会失真。 请教这种说法对么?还是我的想法本来就是错误的?

3545 次点击
所在节点    Java
7 条回复
ipwx
2018-05-27 23:29:37 +08:00
你没有 close bufferedwriter

讲道理俩文件对拷不需要 buffered
james2013
2018-05-27 23:38:04 +08:00
楼主还是得好好学下 Java 基础. bos.write(bytes);在最后一次读取文件时,有效长度是 500,数组长度是 4800,而你把整个数组写进去文件了,后面的是无效数据.应该这么写 bos.write(bs,0,temp);
wdlth
2018-05-28 00:05:08 +08:00
为何不用 nio 的复制呢?
pomony
2018-05-28 02:48:09 +08:00
赞成 2 楼,写数据的话,如果有效数据小于数组长度,会把数组后面空的数据写进去,所以长度有所不同,用带 offset 的方法进行控制,只写入有效长度
whatisnew
2018-05-28 03:20:05 +08:00
transfer
yzmm
2018-05-28 09:39:42 +08:00
2 楼明显正解。。。应该是 fos.write(bytes,0,temp)
Hippie
2018-05-31 16:59:51 +08:00
回炉深造

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/458199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX