日期:2014-05-20 浏览次数:20954 次
BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
try
{
byte[] buffer = new byte[4096];
int len = -1;
while((len = in.read(buffer)) != -1)
{
//TODO
}
}
finally
{
in.close();
in = null;
}
------解决方案--------------------
4096只是各种书上的推荐值.
其实每一次只搬4096(4k)对于现在的机器配置以及JDK1.3以上来说有些小气了。这样会因为while而消耗CPU时间.
如果文件不超过512K, 直接拿文件的length()做buffer的大小
如果超过了,最好用512K的倍数,映像中java的堆是按这个数分配的.
----
早在win2k时代 10M以下文件在MSDOS复制时的默认缓存就已经是32K