日期:2014-05-20 浏览次数:20802 次
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