//记录一下!
BufferedInputStream和BufferedOutputStream是Java标准库中的两个I/O类,它们提供了对输入和输出流的缓冲功能,以提高I/O性能。
BufferedInputStream是InputStream的子类,它使用内部缓冲区来读取输入流的数据。当使用BufferedInputStream读取数据时,它会尽可能多地从底层输入流中读取数据并存储在内部缓冲区中。这样,在后续读取操作时,可以从缓冲区中快速获取数据,而不需要每次都从底层输入流中读取,从而减少了I/O操作的次数,提高了读取性能。
BufferedOutputStream是OutputStream的子类,它使用内部缓冲区来写入输出流的数据。当使用BufferedOutputStream写入数据时,数据会先被写入到内部缓冲区,然后根据缓冲区的大小或者手动调用flush()方法时,数据才会被一次性写入到底层输出流中。这样可以减少实际的写入操作次数,提高写入性能。
使用BufferedInputStream和BufferedOutputStream的好处是,它们可以减少对底层输入输出流的直接访问,减少了频繁的I/O操作,从而提高了读写的效率。特别是在处理大量数据或者网络传输时,使用缓冲流可以明显地提高程序的性能。
使用BufferedInputStream
来包装FileInputStream
,以便进行分块读取,并使用BufferedOutputStream
来包装FileOutputStream
,以便进行分块写入。bufferSize
变量定义了缓冲区的大小,可以根据需要进行调整。
在循环中,我们使用bis.read(buffer)
来从输入流中读取数据块,并将读取的字节数存储在bytesRead
变量中。然后,我们使用bos.write(buffer, 0, bytesRead)
将读取的数据块写入到输出流中。文章来源:https://www.toymoban.com/news/detail-499017.html
通过这种方式,我们可以一次处理一小块数据,而不是将整个文件加载到内存中,从而避免内存溢出问题。同时,使用缓冲流可以提高读取和写入的性能,因为它们会在内部维护一个缓冲区,减少了对底层文件系统的频繁访问。文章来源地址https://www.toymoban.com/news/detail-499017.html
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.File;
public class FileProcessor {
public static void main(String[] args) {
String sourceFilePath = "txttestA.txt";
String destinationFilePath = "txttestB.txt";
int bufferSize = 1118192; //1118192Byte=1.066391MB 缓冲区大小,可以根据需要进行调整
File file = new File(sourceFilePath);
long fileSizeBytes = file.length();
double fileSizeMB = (double) fileSizeBytes / (1024 * 1024); // 转换为MB
System.out.println("文件txttestA.txt大小: " + fileSizeMB + " MB");
long startTime = System.currentTimeMillis();
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFilePath), bufferSize);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destinationFilePath), bufferSize)) {
byte[] buffer = new byte[bufferSize];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);
}
//BufferedOutputStream的write(byte[] buffer, int offset, int length)方法用于将字节数组中的数据写入输出流。
// 刷新缓冲区,确保所有数据都被写入到输出流中
bos.flush();
} catch (IOException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
System.out.println("读写过程所用的时间:" + elapsedTime + "毫秒");
}
}
// 输出:
// 文件txttestA.txt大小: 13.102161407470703 MB
// 读写过程所用的时间:18毫秒
到了这里,关于复制13.1MB的文本文件java仅用18毫秒(速度很OK)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!