把d:\\bbb.mp4复制到当前项目目录下的copy.mp4中 分别用FileInputStream和BufferedInputStream类中的两种read()方法,共四种方式复制并比较效率。
时间: 2024-02-16 19:00:23 浏览: 78
好的,我可以帮你解答这个问题。
首先,需要明确一下四种方式:
1. FileInputStream的read()方法
2. FileInputStream的read(byte[] b)方法
3. BufferedInputStream的read()方法
4. BufferedInputStream的read(byte[] b)方法
下面是示例代码:
```java
import java.io.*;
public class FileCopyTest {
public static void main(String[] args) {
String sourcePath = "d:\\bbb.mp4"; // 源文件路径
String destPath = "copy.mp4"; // 目标文件路径
// FileInputStream的read()方法
long start = System.currentTimeMillis();
try (FileInputStream fis = new FileInputStream(sourcePath);
FileOutputStream fos = new FileOutputStream(destPath)) {
int data;
while ((data = fis.read()) != -1) {
fos.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println("FileInputStream的read()方法耗时:" + (end - start) + "毫秒");
// FileInputStream的read(byte[] b)方法
start = System.currentTimeMillis();
try (FileInputStream fis = new FileInputStream(sourcePath);
FileOutputStream fos = new FileOutputStream(destPath)) {
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) != -1) {
fos.write(buffer, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
end = System.currentTimeMillis();
System.out.println("FileInputStream的read(byte[] b)方法耗时:" + (end - start) + "毫秒");
// BufferedInputStream的read()方法
start = System.currentTimeMillis();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourcePath));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath))) {
int data;
while ((data = bis.read()) != -1) {
bos.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
end = System.currentTimeMillis();
System.out.println("BufferedInputStream的read()方法耗时:" + (end - start) + "毫秒");
// BufferedInputStream的read(byte[] b)方法
start = System.currentTimeMillis();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourcePath));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath))) {
byte[] buffer = new byte[1024];
int length;
while ((length = bis.read(buffer)) != -1) {
bos.write(buffer, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
end = System.currentTimeMillis();
System.out.println("BufferedInputStream的read(byte[] b)方法耗时:" + (end - start) + "毫秒");
}
}
```
这个程序会复制 `d:\\bbb.mp4` 文件到当前项目目录下的 `copy.mp4` 文件,并分别使用四种方式复制,并输出每种方式的耗时(单位:毫秒)。
需要注意的是,在使用 `try-with-resources` 语句时,不需要显式地关闭流,因为这些流会在代码块结束时被自动关闭。
至于哪种方式更高效,这要根据具体的环境和需求来决定。一般来说,使用 `BufferedInputStream` 的效率会更高一些,因为它可以减少磁盘 I/O 次数,从而提高效率。而使用 `read(byte[] b)` 方法也可以提高效率,因为每次读取文件的字节数更多,减少了读取次数。
希望这个回答能够帮到你!
阅读全文