我正在将数据从一个文件复制到另一个文件 .
这需要更多时间 . 什么原因?
我的代码在这里
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 )
{
}
}
3 回答
2个理由
缓冲区太小,使其成为4kb或8kb,不断增加,直到手机崩溃,然后向前移动一步
阅读和写作需要在两个不同的线程上 . 当读取完成时,将其放在q上,并且当写完成时从q读取它 . 别忘了同步q对象 .
编写此类代码时,需要最大程度地使用CPU和内存 . 在线程和一个while循环是如此学院C'ish .. :)
请检查代码,我所做的是增加缓冲区大小并在接触到1 MB时立即刷新数据,这样就不会遇到内存不足错误 .
原因主要是由于缓冲区大小较小,在写入小字节信息时需要时间 . 最好一次放一大块 .
您可以根据需要修改这些值 .
不,你不是 . 您正在解密输入流并将明文写入输出流 .
比什么时间更多?
基本上你的微小缓冲区大小 . 将其提升至至少8192字节:如果继续有益,则更多 .
您不需要初始化此变量 .
往上看 . 改为至少8192 .
如果
buf.length
为零,则read(byte[])
只能返回零,这是一个您不想永远循环的编程错误 . 将条件更改为> 0
.永远不要忽视异常 .
不,不是 . 加密或解密都不需要512字节的缓冲区 .