Io優化
Java中的IO的性能優化 如果只是簡單的文件拷貝,下邊兩種方法也不錯
在使用IO的時候注意一下細節,能使性能得到很大的優化.
首先讀寫大文件,使用Buffer是肯定的了,使用方法,有下邊兩個
方法一:
2
public static void test1(String fileName) {
3
long start = System.currentTimeMillis();
4
try {
5
FileInputStream fis = new FileInputStream(fileName);
6
BufferedReader br = new BufferedReader( new InputStreamReader(fis) );
7
StringBuffer sb = new StringBuffer();
8
String str;
9
while ((str = br.readLine()) != null ) {
10
sb.append(str);
11
} </span>
12
} </span> catch (IOException e) {
13
} </span>
14
long end = System.currentTimeMillis();
15
long time = end - start;
16
System.out.println(time);
17
} </span>
18
方法二:
19
public static void test2(String fileName) {
20
long start = System.currentTimeMillis();
21
try {
22
FileInputStream fis = new FileInputStream(fileName);
23
byte buf[] = new byte [ 8192 ];
24
int n;
25
StringBuffer sb = new StringBuffer();
26
while ((n = fis.read(buf)) != - 1 ) {
27
sb.append(buf);
28
} </span>
29
fis.close();
30
} </span> catch (IOException e) {
31
} </span>
32
long end = System.currentTimeMillis();
33
long time = end - start;
34
System.out.println(time);
35
}</span>
方法一1937ms
方法二47ms
測試結果相差大概50倍左有,很大。
而我平時的習慣是方法一。問題主要出在readLine()上。
public static void test3() {
2
String cmd = " copy d:/out1.txt out2.txt " ;
3
try {
4
Runtime.getRuntime().exec(cmd);
5
} </span> catch (Exception e) {
6
e.printStackTrace();
7
} </span>
8
} </span>
9
public static void test4() {
10
String inFileName = " d:/out1.txt " ;
11
String outFileName = " d:/out2.txt " ;
12
long start = System.currentTimeMillis();
13
try {
14
File inFile = new File(inFileName);
15
File outFile = new File(outFileName);
16
RandomAccessFile inRaf = new RandomAccessFile(inFile, " r " );
17
RandomAccessFile outRaf = new RandomAccessFile(outFile, " rw " );
18
FileChannel infc = inRaf.getChannel();
19
FileChannel outfc = outRaf.getChannel();
20
infc.transferTo( 0 , inFile.length(),outfc );
21
infc.close();
22
outfc.close();
23
} </span> catch (Exception e) {
24
e.printStackTrace();
25
} </span>
26
long end = System.currentTimeMillis();
27
long time = end - start;
28
System.out.println(time);</span></span>