部分代码: /获取当前工程下的 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]; 或者更高时,复制的图片字节数发生改变。但是图片没有看出失真的现象。 那么当我设置存储数组的值越低时,是否零存储越低,但不会失真。 请教这种说法对么?还是我的想法本来就是错误的?
1
ipwx 2018-05-27 23:29:37 +08:00 via iPhone
你没有 close bufferedwriter
讲道理俩文件对拷不需要 buffered |
2
james2013 2018-05-27 23:38:04 +08:00 2
楼主还是得好好学下 Java 基础. bos.write(bytes);在最后一次读取文件时,有效长度是 500,数组长度是 4800,而你把整个数组写进去文件了,后面的是无效数据.应该这么写 bos.write(bs,0,temp);
|
3
wdlth 2018-05-28 00:05:08 +08:00
为何不用 nio 的复制呢?
|
4
pomony 2018-05-28 02:48:09 +08:00 via Android
赞成 2 楼,写数据的话,如果有效数据小于数组长度,会把数组后面空的数据写进去,所以长度有所不同,用带 offset 的方法进行控制,只写入有效长度
|
5
whatisnew 2018-05-28 03:20:05 +08:00
transfer
|
6
yzmm 2018-05-28 09:39:42 +08:00
2 楼明显正解。。。应该是 fos.write(bytes,0,temp)
|
7
Hippie 2018-05-31 16:59:51 +08:00
回炉深造
|