几种Java读写数据的流机能对比   
               添加时间:2013-5-14 点击量: 
 
                迩来,在做办事器后台处理惩罚数据的时辰,须要用到Java自带的几种流对数据进行读写,初始时没怎么在意,就随便用了一个,成果发明机能上并不尽如人意。于是对几种常用的流做了个小小的机能测试。测试代码如下:
  1     public static int FileOutputStreamTime = 0;
  2     public static int BufferedOutputStreamTime = 0;
  3     public static int FileWriterTime = 0;
  4     public static int FileInputStreamTime = 0;
  5     public static int BufferedInputStreamTime = 0;
  6     public static int FileReaderTime = 0;
  7     
  8     public static void write(String filePath, String content){
  9         FileOutputStream out = null;
 10         FileOutputStream outStr = null;
 11         BufferedOutputStream buf = null;
 12         FileWriter fw = null;
 13         File f = new File(filePath);
 14         
 15         try {
 16             //Test FileOutputStream
 17             long begin1 = System.currentTimeMillis();            
 18             out = new FileOutputStream(f);
 19             out.write(content.getBytes());
 20             out.close();
 21             long end1 = System.currentTimeMillis();
 22             FileOutputStreamTime += end1 - begin1;
 23 
 24             //Test BufferedOutputStream
 25             long begin2 = System.currentTimeMillis();
 26             outStr = new FileOutputStream(f);
 27             buf = new BufferedOutputStream(outStr);
 28             buf.write(content.getBytes());
 29             buf.flush();
 30             buf.close();
 31             long end2 = System.currentTimeMillis();
 32             BufferedOutputStreamTime += end2 - begin2;
 33 
 34             //Test FileWriter
 35             long begin3 = System.currentTimeMillis();
 36             // the second parameter true,Whether or not a file will be covered
 37             // or appended.
 38             fw = new FileWriter(f);
 39             // fw = new FileWriter(d:/test/testwrite/add2.txt,true);
 40             fw.write(content);
 41             fw.close();
 42             long end3 = System.currentTimeMillis();
 43             FileWriterTime += end3 - begin3;
 44         } catch (Exception e) {
 45             e.printStackTrace();
 46         } finally {
 47             try {
 48                 fw.close();
 49                 buf.close();
 50                 outStr.close();
 51                 out.close();
 52             } catch (Exception e) {
 53                 e.printStackTrace();
 54             }
 55         }
 56     }
 57     
 58     public static void read(String filePath){
 59         FileInputStream in = null;
 60         BufferedInputStream buf = null;
 61         FileReader reader = null;
 62         BufferedReader br = null;
 63         StringBuffer sb = new StringBuffer();
 64         
 65         try {
 66             //Test FileInputStream
 67             long begin1 = System.currentTimeMillis();
 68             File f = new File(filePath);
 69             in = new FileInputStream(f);
 70             int len1 = 512;
 71             byte[] bytes1 = new byte[len1];
 72             
 73             while ((len1 = in.read(bytes1, 0, len1)) != -1) {
 74                 if(len1 < 512){
 75                     byte[] tmpBuf = new byte[len1];
 76                     System.arraycopy(bytes1, 0, tmpBuf, 0, len1);                
 77                     sb.append(new String(tmpBuf));
 78                     tmpBuf = null;
 79                 }else{
 80                     sb.append(new String(bytes1));
 81                 }
 82             }
 83 
 84             in.close();
 85             long end1 = System.currentTimeMillis();
 86             FileInputStreamTime += end1 - begin1;
 87             
 88             //Test BufferedInputStream
 89             long begin2 = System.currentTimeMillis();
 90             int len2 = 512;
 91             byte[] bytes2 = new byte[len2];
 92             buf = new BufferedInputStream(new FileInputStream(f));
 93             while ((len2 = buf.read(bytes2, 0, len2)) != -1) {
 94                 if(len2 < 512){
 95                     byte[] tmpBuf = new byte[len2];
 96                     System.arraycopy(bytes2, 0, tmpBuf, 0, len2);                
 97                     sb.append(new String(tmpBuf));
 98                     tmpBuf = null;
 99                 }else{
100                     sb.append(new String(bytes2));
101                 }
102             }
103 
104             buf.close();
105             long end2 = System.currentTimeMillis();
106             BufferedInputStreamTime += end2 - begin2;
107             
108             //Test FileReader
109             long begin3 = System.currentTimeMillis();
110             reader = new FileReader(f);
111             br = new BufferedReader(reader);
112             String str;
113             while ((str = br.readLine()) != null) {
114                 sb.append(str);
115             }
116             br.close();
117             reader.close();
118             long end3 = System.currentTimeMillis();
119             FileReaderTime += end3 - begin3;
120 
121         } catch (Exception e) {
122             e.printStackTrace();
123         } finally {
124             try {
125                 br.close();
126                 reader.close();
127                 in.close();
128                 buf.close();
129             } catch (Exception e) {
130                 e.printStackTrace();
131             }
132         }
133     }
  测试时,分别对不合大小的数据做500次同样的操纵,取得的均匀耗时如下:
不合流耗时对比(ms) 
 我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
                     
                  
     
  
 
    
    
   
   
    
  
  
     	
 
     
     
     
 
 
   
 
 
 
  
迩来,在做办事器后台处理惩罚数据的时辰,须要用到Java自带的几种流对数据进行读写,初始时没怎么在意,就随便用了一个,成果发明机能上并不尽如人意。于是对几种常用的流做了个小小的机能测试。测试代码如下:
1 public static int FileOutputStreamTime = 0;
2 public static int BufferedOutputStreamTime = 0;
3 public static int FileWriterTime = 0;
4 public static int FileInputStreamTime = 0;
5 public static int BufferedInputStreamTime = 0;
6 public static int FileReaderTime = 0;
7
8 public static void write(String filePath, String content){
9 FileOutputStream out = null;
10 FileOutputStream outStr = null;
11 BufferedOutputStream buf = null;
12 FileWriter fw = null;
13 File f = new File(filePath);
14
15 try {
16 //Test FileOutputStream
17 long begin1 = System.currentTimeMillis();
18 out = new FileOutputStream(f);
19 out.write(content.getBytes());
20 out.close();
21 long end1 = System.currentTimeMillis();
22 FileOutputStreamTime += end1 - begin1;
23
24 //Test BufferedOutputStream
25 long begin2 = System.currentTimeMillis();
26 outStr = new FileOutputStream(f);
27 buf = new BufferedOutputStream(outStr);
28 buf.write(content.getBytes());
29 buf.flush();
30 buf.close();
31 long end2 = System.currentTimeMillis();
32 BufferedOutputStreamTime += end2 - begin2;
33
34 //Test FileWriter
35 long begin3 = System.currentTimeMillis();
36 // the second parameter true,Whether or not a file will be covered
37 // or appended.
38 fw = new FileWriter(f);
39 // fw = new FileWriter(d:/test/testwrite/add2.txt,true);
40 fw.write(content);
41 fw.close();
42 long end3 = System.currentTimeMillis();
43 FileWriterTime += end3 - begin3;
44 } catch (Exception e) {
45 e.printStackTrace();
46 } finally {
47 try {
48 fw.close();
49 buf.close();
50 outStr.close();
51 out.close();
52 } catch (Exception e) {
53 e.printStackTrace();
54 }
55 }
56 }
57
58 public static void read(String filePath){
59 FileInputStream in = null;
60 BufferedInputStream buf = null;
61 FileReader reader = null;
62 BufferedReader br = null;
63 StringBuffer sb = new StringBuffer();
64
65 try {
66 //Test FileInputStream
67 long begin1 = System.currentTimeMillis();
68 File f = new File(filePath);
69 in = new FileInputStream(f);
70 int len1 = 512;
71 byte[] bytes1 = new byte[len1];
72
73 while ((len1 = in.read(bytes1, 0, len1)) != -1) {
74 if(len1 < 512){
75 byte[] tmpBuf = new byte[len1];
76 System.arraycopy(bytes1, 0, tmpBuf, 0, len1);
77 sb.append(new String(tmpBuf));
78 tmpBuf = null;
79 }else{
80 sb.append(new String(bytes1));
81 }
82 }
83
84 in.close();
85 long end1 = System.currentTimeMillis();
86 FileInputStreamTime += end1 - begin1;
87
88 //Test BufferedInputStream
89 long begin2 = System.currentTimeMillis();
90 int len2 = 512;
91 byte[] bytes2 = new byte[len2];
92 buf = new BufferedInputStream(new FileInputStream(f));
93 while ((len2 = buf.read(bytes2, 0, len2)) != -1) {
94 if(len2 < 512){
95 byte[] tmpBuf = new byte[len2];
96 System.arraycopy(bytes2, 0, tmpBuf, 0, len2);
97 sb.append(new String(tmpBuf));
98 tmpBuf = null;
99 }else{
100 sb.append(new String(bytes2));
101 }
102 }
103
104 buf.close();
105 long end2 = System.currentTimeMillis();
106 BufferedInputStreamTime += end2 - begin2;
107
108 //Test FileReader
109 long begin3 = System.currentTimeMillis();
110 reader = new FileReader(f);
111 br = new BufferedReader(reader);
112 String str;
113 while ((str = br.readLine()) != null) {
114 sb.append(str);
115 }
116 br.close();
117 reader.close();
118 long end3 = System.currentTimeMillis();
119 FileReaderTime += end3 - begin3;
120
121 } catch (Exception e) {
122 e.printStackTrace();
123 } finally {
124 try {
125 br.close();
126 reader.close();
127 in.close();
128 buf.close();
129 } catch (Exception e) {
130 e.printStackTrace();
131 }
132 }
133 }
测试时,分别对不合大小的数据做500次同样的操纵,取得的均匀耗时如下:
| 我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》 | 




