`
cq520
  • 浏览: 166590 次
  • 性别: 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实现缓存可以通过读取本地文件的方式实现,改代码就是通过读取本地文件实现缓存的简单例子

    MyBatis-05 缓存机制

    如果在同一个SqlSession中再次执行相同的查询,MyBatis会首先检查一级缓存,如果缓存中有结果,则直接返回,避免了重复的数据库访问。然而,一级缓存在SqlSession关闭时会被清空,因此,跨SqlSession的查询无法共享...

    java文件操作(增删改查)

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

    Class文件转JAVA

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

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

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

    java读取shp文件代码

    - 此外还需要导入标准Java库如`java.io.*`等用于文件操作。 #### 代码分析与解读 1. **类定义**:`public class ShapefileReader`定义了一个名为`ShapefileReader`的公共类,用于处理Shapefile文件的读取工作。 ...

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

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

    J2Cache 基于内存和 Redis 的两级 Java 缓存框架

    Java 两级缓存框架,可以让应用支持两级缓存框架 ehcache(Caffeine) + redis 。避免完全使用独立缓存系统所带来的网络IO开销问题。J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存...

    java操作mongoDB实现文件上传预览打包下载

    对于"java操作mongoDB实现文件上传预览打包下载"这个主题,我们将深入探讨如何利用Java与MongoDB交互,实现文件的上传、下载、预览以及打包下载等功能。 首先,我们需要在Java项目中引入MongoDB的驱动库,通常是...

    Java模拟操作系统(内存管理,进程管理,文件管理,进程通信)

    Java模拟操作系统是一个基于Java编程语言实现的微型操作系统模型,它主要涵盖了四个核心领域:内存管理、进程管理、文件管理和进程通信。这样的项目旨在帮助开发者理解操作系统的工作原理,并提供了一个实践平台来...

    Java中常用缓存Cache机制的实现

    Java中的缓存机制是优化应用程序性能的关键技术之一。它通过将频繁访问的数据存储在内存中,使得后续的访问能够快速地获取数据,避免了硬盘I/O操作,显著提高了程序运行速度。本文主要介绍的是Java中一种简单的基于...

    JAVA文件传输P2P源码

    【JAVA文件传输P2P源码】是一种在局域网内实现文件共享和传输的程序,主要用于方便在没有专用文件传输工具的情况下,朋友之间能够快速、便捷地分享文件。P2P(Peer-to-Peer)技术是其核心,它允许网络中的每一个节点...

    java缓存代码,tomcat JVM配置

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

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

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

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

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

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

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

    Java写的文件共享服务器(源代码)

    总的来说,Java编写的文件共享服务器涉及了网络编程、多线程、文件操作、协议交互等多个核心Java技术,同时也需要考虑到安全性和性能优化,以提供高效、安全的文件共享服务。通过阅读和分析提供的源代码,可以深入...

    java多文件压缩成zip文件并实现下载

    在Java编程中,将多个文件压缩成一个ZIP文件并实现下载是一个常见的任务,尤其是在处理大量数据或文件分发时。这个过程涉及到Java的I/O流、压缩和HTTP响应的使用。下面将详细介绍如何实现这个功能。 首先,我们需要...

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

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

Global site tag (gtag.js) - Google Analytics