Java中的IO的性能優化
?
Java中的IO的性能優化
在使用IO的時候注意一下細節,能使性能得到很大的優化.
首先讀寫大文件,使用Buffer是肯定的了,使用方法,有下邊兩個
?1
方法一:
?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
????????}
12
????}
?
catch
?(IOException?e)?
{
13
????}
14
????
long
?end?
=
?System.currentTimeMillis();
15
????
long
?time
=
end
-
start;
16
????System.out.println(time);
17
}
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
????????}
29
????????fis.close();
30
????}
?
catch
?(IOException?e)?
{
31
????}
32
????
long
?end?
=
?System.currentTimeMillis();
33
????
long
?time
=
end
-
start;
34
????System.out.println(time);
35
}

?2



?3

?4



?5

?6

?7

?8

?9



10

11

12



13

14

15

16

17

18

19



20

21



22

23

24

25

26



27

28

29

30



31

32

33

34

35

方法一1937ms?
方法二47ms
測試結果相差大概50倍左有,很大。
而我平時的習慣是方法一。問題主要出在readLine()上。
如果只是簡單的文件拷貝,下邊兩種方法也不錯
?1
public
?????
static
?????
void
???test3()??????
{
?2
????String?cmd??
=
?
"
?copy?d:/out1.txt?out2.txt?
"
?;
?3
????
try
?
{
?4
?????????Runtime.getRuntime().exec(cmd);
?5
????}
?
catch
?(Exception?e)?
{
?6
?????????e.printStackTrace();
?7
????}
?8
}
?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
????}
?
catch
?(Exception?e)?
{
24
????????e.printStackTrace();
25
????}
26
????
long
??end??
=
??System.currentTimeMillis();
27
????
long
??time?
=
?end?
-
?start;
28
????System.out.println(time);
29
}



?2

?3



?4

?5



?6

?7

?8

?9



10

11

12

13



14

15

16

17

18

19

20

21

22

23



24

25

26

27

28

29

posted on 2006-11-10 18:05 dreamstone 閱讀(2200) 評論(3) 編輯 收藏 所屬分類: jdk相關