我正在将数据从一个文件复制到另一个文件。
这需要更多时间。是什么原因?
我的代码在这里
public void copyData( InputStream in, OutputStream out ) throws IOException { try { in = new CipherInputStream( in, dcipher ); int numRead = 0; byte[] buf = new byte[512]; while ( ( numRead = in.read( buf ) ) >= 0 ) { out.write( buf, 0, numRead ); } out.close(); in.close(); } catch ( java.io.IOException e ) { } }
答案 0 :(得分:1)
请检查代码,我所做的是增加缓冲区大小并在接触到1 MB时立即刷新数据,这样就不会遇到内存不足错误。
原因主要是由于缓冲区大小较小,在写入小字节信息时需要时间。最好一次放一大块。
您可以根据需要修改这些值。
public void copyData( InputStream in, OutputStream out ) throws IOException
{
try
{
int numRead = 0;
byte[] buf = new byte[102400];
long total = 0;
while ( ( numRead = in.read( buf ) ) >= 0 )
{
total += numRead;
out.write( buf, 0, numRead );
//flush after 1MB, so as heap memory doesn't fall short
if (total > 1024 * 1024)
{
total = 0;
out.flush();
}
}
out.close();
in.close();
}
catch ( java.io.IOException e )
{
}
}
答案 1 :(得分:-1)
2个原因
编写此类代码时,需要最大程度地使用CPU和内存。在线程和while循环是如此学院C'ish .. :)