昨天学习了字节输入流 :InputStream和字节输出流 :OutputStream的一些常用方法,课后老师要求我们能利用所学知识来提高文件复制的性能。课后我用了两种方法实现文件的复制,第一种是读取一个字节写入一个字节的方法,这种方法比较慢,耗时多。第二种方法是创建了一个字节数组作为中间流的缓存区(姑且让我这么说),因为其原理是先将输入流存放到数组,再将数组中的数据流写入输出流中,这样大大减少了耗时时间量。下面是两种方法的源代码及凭自己的理解加的一些注释,可能会不太精准
方法一:普通实现,大小为915k的文件复制耗时约1400多毫秒
/**
* 提高文件复制效率:例如要将F:\sun\上课笔记\cc.txt中的内容复制到F:\sun\上课笔记\x.txt中, cc.txt的大小为915KB
*/
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Homeworkcopy1 {
public static void main(String[] args) {
try {
//根据文件路径创建文件输入流
FileInputStream input=new FileInputStream("F:\\sun\\上课笔记\\cc.txt");
// 根据文件路径创建文件字节输出流, 如果文件不存在,就会自动创建这个文件
FileOutputStream output=new FileOutputStream("F:\\sun\\上课笔记\\x.txt");
//创建一个文件复制前的时间
long time = System.currentTimeMillis();
//读取一个字节写入一个字节,直到到达文件尾部 ,速度慢
try {
int t = input.read();
while (t != -1) {
output.write(t);
t = input.read();
}
//刷新此输出流并强制写出所有缓冲的输出字节
output.flush();
//关闭输出流
output.close();
//关闭输入流
input.close();
} catch (IOException e) {
e.printStackTrace();
}
//定义一个结束时间,计算文件复制时间,耗时大约1400多毫秒
long time1 = System.currentTimeMillis();
System.out.println(time1-time);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
方法二:改进后,大小为915k的文件复制耗时约15毫秒
/**
* 提高文件复制效率:例如要将F:\sun\上课笔记\cc.txt中的内容复制到F:\sun\上课笔记\y.txt中, cc.txt的大小为915KB
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Homeworkcopy2 {
public static void main(String[] args) {
try {
//根据文件路径创建文件输入流
FileInputStream input=new FileInputStream("F:\\sun\\上课笔记\\cc.txt");
// 根据文件路径创建文件字节输出流, 如果文件不存在,就会自动创建这个文件
FileOutputStream output=new FileOutputStream("F:\\sun\\上课笔记\\y.txt");
//创建一个文件复制前的时间
long time = System.currentTimeMillis();
//创建一个文件对象并给定路径
File f=new File("F:\\sun\\上课笔记\\cc.txt");
//创建一个字符数组并将文件的长度赋给它,用来作为中间数组存放流中的数据
byte[] b=new byte[(int) f.length()];
try {
//从输入流中读取字节填充b数组
input.read(b);
//将b数组中的所有字节写到输出流中
output.write(b);
//刷新此输出流并强制写出所有缓冲的输出字节
output.flush();
//关闭输出流
output.close();
//关闭输入流
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//定义一个结束时间,计算文件复制时间,大概为15毫秒
long time1 = System.currentTimeMillis();
System.out.println(time1-time);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
2. 块复制:为了提高效率,文件复制可以采用块为单位进行,一次读取和写入多个字节。这种方式减少了磁盘I/O的次数,提高了复制速度。 3. 并行复制:利用多线程或分布式系统,同时从源文件读取数据并写入多个目标...
在StartCopy方法中,我们使用了transferTo方法来实现文件复制,该方法可以将源文件的内容直接传输到目标文件中,这样可以提高文件复制的效率。在文件复制完成后,我们可以打印出文件复制的时间和速度信息。 知识点3...
下面将详细阐述大文件复制的挑战、FastCopy的特点以及如何使用它来提升复制性能。 首先,我们要理解为什么大文件复制会成为问题。当处理GB级别的大文件时,传统的文件复制方法,如Windows自带的复制粘贴功能,可能...
Java 文件复制器是一种实用程序,用于在计算机上复制文件。在这个特定的代码示例中,我们看到一个名为 `FileCopy` 的类,该类包含了复制文件的核心逻辑。下面我们将详细探讨这个程序的关键部分以及实现文件复制所...
10. **硬件升级**:如果系统性能瓶颈在于CPU或内存,那么升级硬件可以进一步提升文件复制速度。增加内存容量可以减少硬盘的换页操作,而更快的CPU则可以更快地处理复制操作。 综上所述,提升文件复制速度涉及多个...
因为文件系统监听和文件复制可能涉及I/O操作,这些操作通常是阻塞的,如果在一个线程中执行,可能会阻塞程序的其他部分。为了解决这个问题,我们可以创建一个单独的线程或线程池来处理文件复制。在Python中,可以...
总结来说,"文件复制工具类"是为了简化和优化文件复制过程而设计的代码模块,它涵盖了文件I/O、路径处理、异常处理等多个关键知识点,对于提高开发效率和保证程序稳定性有着重要作用。通过学习和使用这样的工具类,...
### Java 文件复制技术详解 在Java编程中,文件复制是一项常用且重要的操作。无论是单一文件还是整个文件夹的复制,都是开发过程中常见的需求之一。本文将深入探讨如何使用Java实现文件及其目录结构的完整复制。 #...
3. **性能优化**:对于大量文件的复制操作,可以考虑使用多线程技术来提高复制效率。 4. **错误处理**:良好的错误处理机制可以增强程序的健壮性和用户体验。本例中使用了异常捕获并记录错误日志的方式。 #### 五、...
- **安全威胁检测**:监视文件复制活动可以帮助早期识别潜在的安全威胁,如未经授权的数据转移等。 #### 三、实现方式 ##### 1. 使用Windows内置功能 - **启用SACL记录**:管理员可以通过设置特定文件或目录的...
Teracopy是一款专为提高文件复制和移动速度而设计的软件,尤其在处理大文件或大量文件时,其性能表现尤为突出。它通过使用持续的数据流技术和智能缓存来减少读写操作,从而加快复制过程。 Teracopy的核心功能包括:...
它旨在提高文件复制速度,减少等待时间,提高工作效率。下面我们将深入探讨这个主题,了解相关知识点。 首先,我们来理解为什么传统文件复制过程可能会慢。在Windows系统中,文件复制操作涉及到多个步骤,包括数据...
Java中的IO API可以分为多种不同的编程方式,例如,使用基本的InputStream和OutputStream来实现文件复制,使用缓冲IO来提高性能,使用NIO来实现高性能的IO操作等。 在实际应用中,需要根据实际情况选择合适的IO API...
本篇文章将详细讲解如何使用Java的IO流进行文件复制。 一、基本概念 IO流是Java中处理输入输出的基础,分为字节流和字符流两大类。字节流处理原始的8位字节数据,如 FileInputStream 和 FileOutputStream;字符流...
Copy Handler的核心特性在于其多线程处理技术,能够同时处理多个文件复制任务,显著提高了文件传输速度。相比Windows自带的复制功能,Copy Handler在处理大量文件时更为快速,尤其在大文件或者网络传输的情况下,...
在C# WinForm应用开发中,大文件复制是一项常见的任务,尤其在数据迁移、备份或者文件传输场景下。本文将详细讲解如何在C#中实现高效且稳定的WinForm大文件复制功能。 首先,理解基本的文件操作是至关重要的。C#...
通过使用Windows API,我们可以在不依赖于外部库的情况下模拟这些基本的文件操作,从而提高应用程序的灵活性和性能。 总之,通过Delphi提供的强大API支持和对Windows API的灵活运用,我们可以轻松地实现文件复制和...
这些技术能够减少磁盘访问次数,提高文件复制速度,并且通常能更好地管理系统资源,降低对CPU和内存的占用,使得整个复制过程更快、更平稳。 在标签“海量大量文件复制工具”中,我们可以推断出该软件可能具备以下...
在IT行业中,多文件复制和多线程复制是提高效率的关键技术,特别是在处理大量数据时。本文将深入探讨“FileCopy1.rar”压缩包中所包含的“多文件复制_多线程复制”这一主题。 首先,让我们理解什么是多文件复制。在...
在Qt框架下,实现文件复制并伴随进度条显示是一项常见的任务,这有助于用户了解操作进度,提高用户体验。这里我们将深入探讨如何使用QFile、copy函数以及QProgressBar来完成这一功能。 首先,`QFile`是Qt提供的一个...