关于缓冲流效率有几个小问题

关于缓冲流效率有几个小问题

package com.imooc.flie;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputDemo2 {
//文件的拷贝
	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("test.jpg");
			BufferedInputStream bis = new BufferedInputStream(fis);
			FileOutputStream fos = new FileOutputStream("test_copy.jpg");
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			int n = 0;
			byte[] b = new byte[1024];
			long startTime = System.currentTimeMillis();
			bos.write(b);
			bos.flush();
			while ((n = (fis.read(b))) != -1) {
				fos.write(b, 0, n);
			}
			long endTime = System.currentTimeMillis();
			System.out.println(endTime - startTime);
			fis.close();
			fos.close();
			bos.close();
			bis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}


package com.imooc.flie;


import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;


public class FileOutputDemo1 {

//文件的拷贝

public static void main(String[] args) {

try {

FileInputStream fis = new FileInputStream("test.jpg");

BufferedInputStream bis = new BufferedInputStream(fis);

FileOutputStream fos = new FileOutputStream("test_copy.jpg");

BufferedOutputStream bos = new BufferedOutputStream(fos);

int n = 0;

byte[] b = new byte[1024];

long startTime = System.currentTimeMillis();

while ((n = (fis.read(b))) != -1) {

fos.write(b, 0, n);

}

long endTime = System.currentTimeMillis();

System.out.println(endTime - startTime);

fis.close();

fos.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}


}


}

  1. Demo2的是加了缓冲流的,Demo1是纯文件流,但是我不知道我加的地方对不对

  2. 如果位置对的话,并没有感觉块多少呀,测试是文件流时间差在60~80不等,缓冲流在60~70不等。

  3. 四个.close()方法有必须要按照某种规则顺序去写吗,还是可以任意顺序任意位置,只要是在write和read方法或者含有他们的循环之后

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,

1、第一个问题,流关闭的顺序:建议在关闭流时,先打开的后关闭,后打开的先关闭。就比如我们进行开门时,从大门打开,然后打开卧室门,进入房间,出去时,在我们进行关门时,就要先关卧室门,再关大门。修改后的代码如下:

http://img1.sycdn.imooc.com//climg/5d81f2900909cbbe03830154.jpg

位置:调用close方法,要在使用完流后,进行关闭,也就是在循环后调用就可以。

2、对于下一个问题,你的理解是正确的

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

提问者 mixiaofan 2019-09-18 16:02:07

老师略过吧,我写错了

while ((n = (bis.read(b))) != -1) {

bos.write(b, 0, n);

}

应该是这样

然后缓冲流的close()方法比文件流的先调用

  • 同学很棒呐,调整代码的问题也是编程中的很大一部分内容呐,继续加油,祝:学习愉快~
    2019-09-18 16:07:19
  • 提问者 mixiaofan 回复 好帮手慕酷酷 #2
    那还是想问: 四个.close()方法有必须要按照某种规则顺序去写吗,还是可以任意顺序任意位置,只要是在write和read方法或者含有他们的循环之后 另外,是不是凭空建立文件并写入内容只需要使用输出流(写入)就可以,但是如果是更改意有文件的内容就需要先通过输入流(读取)读取内容然后再通过输出流(写入)对吧
    2019-09-18 16:29:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师