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
} 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
}
方法一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
} 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
}
416




被折叠的 条评论
为什么被折叠?



