我们在使用windows系统时发现,复制一个文件的再粘贴的速度大体上是一致的,我们可以猜想这是微软内部的工作人员设计的一个算法,而这个操作所能实现的最大速度是由什么影响的呢??
那么我们可不可以自己设计一个方法来代替windows自带的复制粘贴方法来达到更快的传输速度呢??
下面的一段代码就以缓冲的形势来实现了文件的copy工作:
publicvoid copybyte(String srcFile,String destFile)throws IOException{
//创建输入流
InputStream ins=new FileInputStream(srcFile);
//创建输出流
OutputStream outs=new FileOutputStream(destFile);
//创建缓冲区,一次读取16K的文件
byte[] buf=newbyte[16384];
int i=ins.read(buf);
System.out.println("开始复制....");
//获取当前时间
System.out.println(System.currentTimeMillis());
while(i!=-1){
outs.write(buf);
i=ins.read(buf);
}
System.out.println(System.currentTimeMillis());
System.out.println("复制结束....");
//关闭流
ins.close();
outs.close();
}
首先,我使用了一个860多M的程序进行测试,发现在windows中复制粘贴的速度大体上是在40M每秒左右,复制一个这样的文件大约需要20多秒的时间,而使用上述方法进行复制的时候,经过反复的测试,发现时间基本上在23秒左右的样子,而且当数值超过16K之后,速度就不会再增大了,而调整为8K的时候,时间大概在29秒左右,其实这也就解释了一个现象,算法本身并不能超过电脑硬盘与CPU之间的交互速度,硬件依旧是瓶颈,但是我们能不能用一块外置的更快的硬盘来实现提升原本硬盘的速度呢??
此外,看过BufferredInputStream源码的都知道,里面有这样的一个属性:
privatestaticintdefaultBufferSize = 8192;
这就说明,缓冲输入流定义的缓冲数组的大小是8K,并没有达到计算机的极限速度,计算机还有更多的秘密等待着我们去发现呢
相关推荐
java实现缓存可以通过读取本地文件的方式实现,改代码就是通过读取本地文件实现缓存的简单例子
如果在同一个SqlSession中再次执行相同的查询,MyBatis会首先检查一级缓存,如果缓存中有结果,则直接返回,避免了重复的数据库访问。然而,一级缓存在SqlSession关闭时会被清空,因此,跨SqlSession的查询无法共享...
### 缓存机制在XML文件数据读取中的应用 #### 一、背景介绍与问题提出 在现代软件开发中,XML(可扩展标记语言)作为一种轻量级的数据存储和交换格式,广泛应用于不同系统间的数据交换及配置文件的管理。然而,当...
- 缓存策略也是关键,对经常访问的文件,可以缓存转换后的结果,提高响应速度。 7. **错误处理**: - 设计完善的错误处理机制,如文件不存在、转换失败等情况,应返回友好的错误信息。 综上所述,利用Java后端...
轻松方便的把class文件转化为java文件
深度对MyBatis关联映射进行深入学习,包括MyBatis缓存机制、配置文件、映射文件的使用。 本文可以归类为MyBatis框架的学习教程,其核心主题是带领读者深入掌握MyBatis的配置与使用。 包含文件: 1.项目所需的所有架包...
- 此外还需要导入标准Java库如`java.io.*`等用于文件操作。 #### 代码分析与解读 1. **类定义**:`public class ShapefileReader`定义了一个名为`ShapefileReader`的公共类,用于处理Shapefile文件的读取工作。 ...
这可能需要了解操作系统级别的文件权限,并在Java中实现相应的验证机制。 10. **日志记录**:为了便于调试和跟踪系统行为,文件管理系统可能会记录操作日志,使用`java.util.logging`或第三方的日志库如Log4j。 综...
对于"java操作mongoDB实现文件上传预览打包下载"这个主题,我们将深入探讨如何利用Java与MongoDB交互,实现文件的上传、下载、预览以及打包下载等功能。 首先,我们需要在Java项目中引入MongoDB的驱动库,通常是...
Java中的缓存机制是优化应用程序性能的关键技术之一。它通过将频繁访问的数据存储在内存中,使得后续的访问能够快速地获取数据,避免了硬盘I/O操作,显著提高了程序运行速度。本文主要介绍的是Java中一种简单的基于...
【JAVA文件传输P2P源码】是一种在局域网内实现文件共享和传输的程序,主要用于方便在没有专用文件传输工具的情况下,朋友之间能够快速、便捷地分享文件。P2P(Peer-to-Peer)技术是其核心,它允许网络中的每一个节点...
例如,在`java写缓存.docx`文件中,可能详细讲解了如何利用这些库创建缓存策略,包括设置缓存大小、过期策略、并发控制等。在自定义缓存实现时,需要注意线程安全、数据一致性以及内存管理,以避免性能瓶颈或内存...
java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间
这个Java工程文件旨在提供一个解决方案,帮助开发者读取`.shp`文件,获取其中的几何对象坐标,并将这些坐标写入新的文件中。下面我们将深入探讨如何用Java处理`.shp`文件以及相关的技术要点。 首先,要读取`.shp`...
这个实例提供了对文件上传下载过程的深入理解和实践操作。以下是关于"Java文件上传下载实例(含详细注释)"的详细知识点解析: 1. **Servlet与JSP**: - Java文件上传通常涉及到Servlet技术,Servlet是Java为HTTP...
总的来说,Java编写的文件共享服务器涉及了网络编程、多线程、文件操作、协议交互等多个核心Java技术,同时也需要考虑到安全性和性能优化,以提供高效、安全的文件共享服务。通过阅读和分析提供的源代码,可以深入...
在Java开发中,大文件上传是一项常见的需求,尤其是在云存储、文件分享等场景下。由于网络环境的不稳定性,单纯的一次性上传大文件可能会因为网络中断而导致上传失败,这时就需要断点续传功能来保证文件传输的可靠性...
通过本文的介绍,我们了解了Java Web应用中实现缓存的多种策略,包括服务器端缓存、分布式缓存、浏览器缓存以及多级缓存的实现。通过合理配置和使用缓存,可以显著提升Java Web应用的性能和用户体验。在实际开发中,...
Java测井平台高效数据操作缓存设计与实现 本文主要介绍了Java测井平台高效数据操作缓存设计与实现,旨在解决不同语言交互处理软件跨平台集成时原有缓存功能不能被继承使用的技术难题。文章首先介绍了基于广义测井...
`SimpleCache`是Java开发中一种常用的缓存工具,它主要目的是为了提高应用程序的性能和响应速度,通过将频繁访问的数据暂存到内存中,避免每次请求时都去查询数据库或进行其他耗时操作。在Java世界里,缓存机制是一...