不用输出保存,只读入流中即可,怎么把图片快速读入输入流啊。

解决方案 »

  1.   


    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;
    }
    适用于任何文件,可以试试100M的文件需要多少时间..很快的...
      

  2.   

    4096只是各种书上的推荐值. 
    其实每一次只搬4096(4k)对于现在的机器配置以及JDK1.3以上来说有些小气了。这样会因为while而消耗CPU时间.
    如果文件不超过512K, 直接拿文件的length()做buffer的大小
    如果超过了,最好用512K的倍数,映像中java的堆是按这个数分配的.
    ----
    早在win2k时代 10M以下文件在MSDOS复制时的默认缓存就已经是32K
      

  3.   

    主要是在android设备上跑,主频是1G的。我也就是下载一些图标,每个8K左右。但是数量众多。1G主频用文件的length做buffer应该毫无压力的吧。
      

  4.   

    1G的主频的 android,8K左右的图片,应该是无压力的.
    -----
    I/O其实和CPU的速度没多大关系,buffer是在内存而不在CPU中,
    简单I流程是这样的: 程序说 要读入一段数据, CPU在某个CPU时刻(存在调度)接到这个命令后 发出命令到总线(一种硬件)说:给偶分配多少空间然后给偶读数据填满它,好了通知偶. 然后CPU就干其它事了,在某个时间总线通知CPU说完了,然后CPU中断正在做的事转而处理程序的下一条命令.(反过来就是O流程)
    总线才是压力的唯一来源[即更换CPU并不能带来太多的性能提升的原因:它只减少了命令在等待处理的时间及在CPU上处理的的时间].
    ===
    关于4096补充一下,它是NTFS的默认簇大小.但Java并不直接操作硬件,这个值应该是"抄"来的