说完了字节流的输入输出,我们来做一个小练习。首先我在d盘里创建一个jpg格式的图片,图片内容和名字可以任取。

        我们知道,字节流可以通过字节实现输入输出,而且能够将文件转换为字节形式存储,所以应当用字节流的形式输入输出jpg格式文件。

        一、创建读取流对象/输出流对象

//文件地址
String filePath0 = "d:\\Naxida.jpg";
String filePath1 = "d:\\Naxida2.jpg";	
//创建读取流对象/输出流对象
//用到FileInputStream/FileOutputStream读取非文本形式文件
FileInputStream fileInputStream = new FileInputStream(filePath0);
FileOutputStream fileOutputStream = new FileOutputStream(filePath1);

        二、输入/输出字节流

        我们这次使用数组来读取文件,首先创建一个byte类型数组用来接受文件内容。

//创建byte类型数组
byte[] b = new byte[1000];

        因为为jpg格式文件,一次读取肯定是不行的,哪怕我用的是数组来接收。所以我要创建一个while循环,还是老样子,新建一个int类型变量来接收数组长度。

int readLength = 0;
while((readLength = fileInputStream.read(b))!=-1) {
	fileOutputStream.write(b,0,readLength);
}

        这里为什么要用write(b,0,readLength)的形式输出呢?因为如果我加入我读取的字节数是1001,我使用的是write(b)方法的话。此时读取完前1000个字节时,最后一个字节会被放在byte数组的第一个位置,而剩下999个字节存放的仍然是上一个数组存储的字节内容并不会发生改变。此时输出必然会发生错误。

        三、关闭流,释放资源

//关闭流,释放资源
//判断输出/输入流不为空
if(fileInputStream != null) {
	fileInputStream.close();
}
if(fileOutputStream != null) {
	fileOutputStream.close();
}

        这时打开d盘,我们会发现我们要拷贝的文件已经出现了。

        好了,字节的输入输出流就说到这里。

更多推荐