`
cq520
  • 浏览: 167779 次
  • 性别: 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中,缓存机制可以分为多种实现方式,包括基于注解的声明式缓存和对Cache...

    Java实现LRU缓存机制:深入解析与高效编码实践

    LRU缓存机制是一种非常实用的缓存淘汰策略,它在很多应用场景中都有广泛的应用。在Java中实现LRU缓存,可以通过使用LinkedHashMap来简化实现,也可以手动实现以获得更好的控制。在多线程环境中,还需要考虑缓存的...

    Java 日志缓存机制的实现

    本文介绍了 Java 日志机制,并通过扩展日志功能,实现日志缓存。同时,可以动态控制日志信息打印到日志文件的级别,从而提高了日志的灵活性,给产品质量带来更大的帮助。文章主要围绕 MemoryHandler 类和 logging....

    java高速文件缓存

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

    java文件操作(增删改查)

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

    java通过文件头内容判断文件类型

    在Java编程中,判断文件类型通常不是通过文件扩展名,而是通过读取文件的头部字节来识别。这是因为有些文件可能没有明确的扩展名,或者扩展名被恶意篡改。文件头内容通常包含特定的标识符,这些标识符是文件格式的...

    Java缓存技术的使用实例

    它很可能包含了一个简单的Java缓存实现,可能使用了HashMap或者其他自定义的数据结构来模拟缓存操作。这样的实例通常会包括以下组件: 1. **缓存接口**:定义缓存的基本操作,如put、get、remove和clear。 2. **...

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

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

    Class文件转JAVA

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

    java开源的文件管理系统

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

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

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

    java文件管理系统(控制台程序)

    这可能需要了解操作系统级别的文件权限,并在Java中实现相应的验证机制。 10. **日志记录**:为了便于调试和跟踪系统行为,文件管理系统可能会记录操作日志,使用`java.util.logging`或第三方的日志库如Log4j。 综...

    Java读取解析GRIB2文件

    确保有适当的错误处理机制,如异常捕获,并利用日志记录进行调试。 以上就是使用Java读取和解析GRIB2文件的基本步骤和涉及的关键技术。实际应用中,你可能还需要根据具体需求进行数据处理、统计分析或集成到更大的...

    nc文件读写 java版本

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

    java实现sftp操作工具类

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

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

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

    java文件转换成pdf

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

    GeoServer瓦片缓存机制研究

    GeoServer 瓦片缓存机制研究 GeoServer 作为一个基于 Java 的开源 GIS 服务器,具有成本低廉、良好的扩展性和部署的灵活性等特点。但是,在面对庞大地图数据、庞大的用户交互时,如果仅仅采用 GeoServer 作为 GIS ...

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

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

Global site tag (gtag.js) - Google Analytics