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();

}

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

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

privatestaticintdefaultBufferSize = 8192;

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

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 缓冲
, system
, 速度
, 系统设计缓存java
, Java文件复制
, 一个
, println
, java复制文件
, java文件的复制
复制机制
hibernate缓存机制、redis缓存机制、android缓存机制、hibernate的缓存机制、java 缓存机制,以便于您获取更多的相关知识。

时间: 2024-08-29 05:45:44

java文件操作及缓存机制依旧有瓶颈的相关文章

java文件操作大全

java文件操作大全 文件的建立/检查与删除<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.io.*"%><html><head><title>文件的建立.检查与删除</title></head><body><%String path=request.getRealPath

二进制-新手请教java文件操作的一个小问题~十分感谢

问题描述 新手请教java文件操作的一个小问题~十分感谢 这个类的功能是将任意一个二进制文件中的0压缩成0的数目+0的形式 即:将二进制文件中16进制显示的00压缩成 "0的数目+00的形式" 如00 00 00 1A 压缩成03 00 1A 待压缩文件16进制内容: 代码执行后后生成的文件却成了如图所示的情况 求教什么地方出错了,万分感谢. import java.io.*; public class FileCompression { public static void main

请教前辈们java文件操作小生的一个疑惑

问题描述 请教前辈们java文件操作小生的一个疑惑 不明白为什么程序执行后temp和二进制值对应不上,且到循环第四次是没有输出temp=0执行了 这是待处理文件的16进制代码 这是输出 import java.io.*; public class test1 { public static void main(String args[]) throws Exception { FCompression(); } public static void FCompression()throws Ex

关于java问题-有关java文件操作的问题

问题描述 有关java文件操作的问题 有一个java程序, 就是统计幼儿园小朋友需要的铅笔(一支铅笔2元)的总价 我已经用面向对象的思想实现了这个程序, 程序输出是一行行的 姓名 年纪 需要铅笔的数目 某小朋友总价 最后输出所有的价格 (例如 小明 4 5 10元 小李 5 4 8元 ......) 现在需要从文件读取一行行的信息(就是上面的格式),并计算总价,这个该怎么做? 解决方案 你好,,根据你的需求,,我是写了一个实体类,,然后用list遍历输出,,代码如下: public class

java文件操作函数与类

一.获得控制台用户输入的信息  代码如下 复制代码 /**获得控制台用户输入的信息      * @return      * @throws IOException      */      public String getInputMessage() throws IOException{         System.out.println("请输入您的命令∶");         byte buffer[]=new byte[1024];         int count=

Java文件操作property文件

有时候,需要直接在java文件中访问.property配置文件. 代码如下. Properties prop = new Properties(); InputStream inputFile = null; try { inputFile = 当前类名.class.getResourceAsStream("/ufinterface.properties"); prop.load(inputFile); } catch (FileNotFoundException e) { e.pri

java文件操作zip压缩文件读取写操作

本文章讲了三个实例是利用java对zip 压缩文件的读写操作,实例如下. 创建一个zip压缩文件 import java.io.fileinputstream; import java.io.fileoutputstream; import java.util.zip.zipentry; import java.util.zip.zipoutputstream; public class main {   public static void main(string[] args) throws

java 文件操作大全

文件的建立/检查与删除 <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <html> <head> <title>文件的建立.检查与删除</title> </head> <body> <% String path=request.getRealPath(&

java文件操作之java写文件简单示例_java

代码很简单,直接上代码,大家参考使用吧 复制代码 代码如下: package com.it.login.service; import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStreamReader;import