`
cq520
  • 浏览: 167102 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java文件操作,缓存机制依旧有瓶颈

阅读更多

我们在使用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();

}

    首先,我使用了一个860M的程序进行测试,发现在windows中复制粘贴的速度大体上是在40M每秒左右,复制一个这样的文件大约需要20多秒的时间,而使用上述方法进行复制的时候,经过反复的测试,发现时间基本上在23秒左右的样子,而且当数值超过16K之后,速度就不会再增大了,而调整为8K的时候,时间大概在29秒左右,其实这也就解释了一个现象,算法本身并不能超过电脑硬盘与CPU之间的交互速度,硬件依旧是瓶颈,但是我们能不能用一块外置的更快的硬盘来实现提升原本硬盘的速度呢??

此外,看过BufferredInputStream源码的都知道,里面有这样的一个属性:

privatestaticintdefaultBufferSize = 8192;

这就说明,缓冲输入流定义的缓冲数组的大小是8K,并没有达到计算机的极限速度,计算机还有更多的秘密等待着我们去发现呢

分享到:
评论

相关推荐

    java 通过文件实现缓存

    java实现缓存可以通过读取本地文件的方式实现,改代码就是通过读取本地文件实现缓存的简单例子

    java高速文件缓存

    在Java中实现高效的文件缓存策略,可以利用Java集合框架、内存管理机制以及第三方库来达到目的。 一、Java内存模型与缓存策略 Java内存模型分为堆内存(Heap)和栈内存(Stack),其中堆内存用于存储对象实例,包括...

    java文件操作(增删改查)

    在Java编程语言中,文件操作是一项基础且重要的技能,它涉及到对磁盘上文件和目录的创建、读取、修改和删除等操作。本项目"java文件操作(增删改查)"是基于控制台实现的一个无界面程序,利用Eclipse集成开发环境编写...

    利用java后端实现文件在线预览

    - 缓存策略也是关键,对经常访问的文件,可以缓存转换后的结果,提高响应速度。 7. **错误处理**: - 设计完善的错误处理机制,如文件不存在、转换失败等情况,应返回友好的错误信息。 综上所述,利用Java后端...

    Class文件转JAVA

    轻松方便的把class文件转化为java文件

    java开源的文件管理系统

    4. **性能优化**:Java的并发处理和垃圾回收机制,使得文件操作和数据处理更加高效。 5. **社区支持**:开源项目通常拥有活跃的开发者社区,能提供持续的更新和问题解答。 二、文件管理系统的工作原理 文件管理...

    SSM框架的学习与应用-Java EE企业级应用开发学习记录(第四天)Mybatis的关联映射和缓存机制

    深度对MyBatis关联映射进行深入学习,包括MyBatis缓存机制、配置文件、映射文件的使用。 本文可以归类为MyBatis框架的学习教程,其核心主题是带领读者深入掌握MyBatis的配置与使用。 包含文件: 1.项目所需的所有架包...

    nc文件读写 java版本

    Java版本的NetCDF库使得开发者能够在Java环境中方便地进行NetCDF文件的读取和写入操作。 1. **NetCDF简介** - NetCDF是一种通用的数据模型,不仅定义了数据结构,还包含了元数据,用于描述数据的含义和布局。 - ...

    仿redis缓存Java版轻量级缓存组件LocalCache

    仿redis缓存Java版轻量级缓存组件LocalCache,基于JVM内存实现数据缓存及过期机制

    java实现sftp操作工具类

    1分让你得到sftp常用操作工具,工具实现如下操作: 1)得到当前工作目录地址 2)改变目录为配置的远程目录 3)取文件目录列表 4)取文件列表 5)下载文件 6)复制文件 7)删除文件 8)目录是否存在,文件是否存在 9)移动文件 ...

    java按行读取大文件并解析入库

    在Java编程中,处理大容量文本文件是一项挑战,因为传统的逐行读取方式可能会消耗大量内存,导致程序崩溃。为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行...

    java文件转换成pdf

    把其他文件类型转换为pdf,java

    java缓存代码,tomcat JVM配置

    例如,在`java写缓存.docx`文件中,可能详细讲解了如何利用这些库创建缓存策略,包括设置缓存大小、过期策略、并发控制等。在自定义缓存实现时,需要注意线程安全、数据一致性以及内存管理,以避免性能瓶颈或内存...

    java操作文件,得到文件名,大小,时间,及修改时间

    java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间

    Java FTP 指定下载文件和上传文件到指定的服务器目录

    通过本文介绍的方法,您可以轻松实现Java应用程序中对FTP服务器的文件上传与下载操作,并能有效地指定文件上传和下载的目标目录。这对于企业级应用中的文件管理有着重要的作用。同时,在实际应用过程中还需注意安全...

    用Java读取.shp文件的工程文件

    这个Java工程文件旨在提供一个解决方案,帮助开发者读取`.shp`文件,获取其中的几何对象坐标,并将这些坐标写入新的文件中。下面我们将深入探讨如何用Java处理`.shp`文件以及相关的技术要点。 首先,要读取`.shp`...

    Java文件上传下载实例(含详细注释)

    这个实例提供了对文件上传下载过程的深入理解和实践操作。以下是关于"Java文件上传下载实例(含详细注释)"的详细知识点解析: 1. **Servlet与JSP**: - Java文件上传通常涉及到Servlet技术,Servlet是Java为HTTP...

    java大文件分块上传断点续传demo

    在Java开发中,大文件上传是一项常见的需求,尤其是在云存储、文件分享等场景下。由于网络环境的不稳定性,单纯的一次性上传大文件可能会因为网络中断而导致上传失败,这时就需要断点续传功能来保证文件传输的可靠性...

    Java Web应用中的缓存机制实现策略与代码示例

    通过本文的介绍,我们了解了Java Web应用中实现缓存的多种策略,包括服务器端缓存、分布式缓存、浏览器缓存以及多级缓存的实现。通过合理配置和使用缓存,可以显著提升Java Web应用的性能和用户体验。在实际开发中,...

Global site tag (gtag.js) - Google Analytics