技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

java读取文件效率问题

日志原文:http://blog.sohu.com/people/!d2VsbGlteXlAc29odS5jb20=/156798731.html    最近在项目中有一个用smb读取共享文件的应用,在部署过程中发现一个奇怪现象,在公司测试时其用时还马马虎虎,虽是有点慢,但还不至于让人无法忍受.但一部署都客户现场,则超级慢.严重影响系统的使用.没办法只能对其进行整改:    1.首先,将所有的for循环检查一遍,能移出去的尽量移出去,并进行不同方法的封装    2.将原有方法中抛出的异常全部捕捉起来,并将所有该关闭的连接全部在finally里面关闭    3.对线程设置timeout,以防止死锁    最后是对程序进行手术,阅读代码才发现原来代码中下载文件用的是:以字节为单位读取文件内容,一次读一个字节这种方式 就是这个原因造成系统运行超慢:           int tempbyte;              while ((tempbyte = ()) != -1) {                  (tempbyte);               }  将其稍微改动一下,一次性读入多个字节:           byte[] tempbytes = new byte[1024];              int byteread = 0;              // 读入多个字节到字节数组中,byteread为一次读入的字节数              while ((byteread = (tempbytes)) != -1) {                  (tempbytes, 0, byteread);            }  重启运行,原来要近一个小时的下载工作,竟然只用了不到5秒钟,就搞定.  总结:     内存存取时间单位是纳秒级(10E-9),磁盘存取时间单位是毫秒级(10E-3),同样操作一次的开销,内存比磁盘快了百万倍。因此要尽量用缓存流进行读写文件,以减少对磁盘的读取次数.     经只读测试,BufferedReader耗用的时间是RandomAccessFile的10倍以上,FileInputStream耗用的时间是RandomAccessFile的1-2倍,测试读的文件是35M左右,如果文件再大差距更明显.这里后面两个用的是字节byte[] b1=new byte[8*1024],而前面也用的是字符char[] data=new char[8*1024]     注意:如果RandomAccessFile用readLine(),则效果会差很多,耗时会比用字节的慢100多倍.     看来IO读取文件,这里面水还挺深的,有时间明天再整理一下.... 全文

java文件效率 效率影响 java文件测试 io流 java

java序列化读取与文本文件读取数据效率对比

<转>java序列化读取与文本文件读取数据效率对比 - 笑天的日志 - 网易博客  2011-02-23 14:08:53|  分类:默认分类|  标签:|字号大中小 订阅java序列化读取与文本文件读取数据效率对比Java2010-05-07 10:50:56阅读49评论0  字号:大中小 订阅分别写入数据到序列化文件和文本文件中:public static void main(String[] args) {  ArrayList al = new ArrayList();  try {      FileWriter fw = new FileWriter(new File("e:\\s.txt"));   for(int i=0;i<1000;i++){    String str = "000\t111\t222\t222\t222\t222\t222\t222\t222\t222\n";    al.add(str);    fw.write(str);   }   fw.close();   FileOutputStream fileStream = new FileOutputStream("e:\\s.obj");    ObjectOutputStream out = new ObjectOutputStream(fileStream);    out.writeObject(al);   out.close();   } catch (Exception e) {   e.printStackTrace();  }    }  然后写程序读取序列化文件和文本文件,并将数据赋值到ArrayList中。序列化读取: public static void main(String[] args) {  ArrayList al = new ArrayList();  try {   long t = System.currentTimeMillis();   FileInputStream fileStream = new FileInputStream("e:\\s.obj");      BufferedInputStream br = new BufferedInputStream(fileStream);    ObjectInputStream in = new ObjectInputStream(br);   al = (ArrayList)in.readObject();      in.close();    System.out.println(System.currentTimeMillis()-t);  } catch (Exception e) {   e.printStackTrace();  }  }//文本文件读取: public static void main(String[] args) {  ArrayList al = new ArrayList();  try {   long t = System.currentTimeMillis();   FileReader fw = new FileReader(new File("e:\\s.txt"));   BufferedReader br = new BufferedReader(fw);   String s = br.readLine();   while (s != null) {    al.add(s);    s = br.readLine();   }   br.close();   fw.close();   System.out.println(System.currentTimeMillis()-t);  } catch (Exception e) {   e.printStackTrace();  } }结论:在行数i=1000时,序列化读取平均32,文本文件读取平均16。在行数i=10000时,序列化读取平均46,文本文件读取平均46。在行数i=100000时,序列化读取平均96,文本文件读取平均316。故在大数据量读取时,使用序列化方式存取数据,效率较高;而在小数据量(小于10000行)时,使用文本文件存取数据效率较高。引文来源  <转>java序列化读取与文本文件读取数据效率对比 - 笑天的日志 - 网易博客... 全文

文件效率 java序列化 文本文件序列化 java 博客

三种读取文件的效率的对比

  import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; class Demo { public static void main(String[] args) throws Exception { File file = new File("1.txt"); long start = System.currentTimeMillis(); read1(file); long end = System.currentTimeMillis(); System.out.println("第一种方法读取文本需要的时间:"+(end - start)); System.out.println("-------------------我是分割线--------------------------"); start = System.currentTimeMillis(); read2(file); end = System.currentTimeMillis(); System.out.println("第一种方法读取文本需要的时间:"+(end - start)); System.out.println("-------------------我是分割线--------------------------"); start = System.currentTimeMillis(); read3(file); end = System.currentTimeMillis(); System.out.println("第一种方法读取文本需要的时间:"+(end - start)); } public static void read2(File file) { try { FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); int b = 0; while ((b = bis.read()) != -1) {} fis.close(); bis.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } public static void read3(File file) throws Exception { FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024]; int b = 0; while ((b = fis.read(buf)) != -1) {} fis.close(); } public static void read1(File file)throws Exception{ FileInputStream fis = new FileInputStream(file); int b = 0; while((b = fis.read()) != -1) {} fis.close(); } }  文件为txt,大小为:4.8Mb... 全文

Java

1