java怎么把本地图片以最快的速度读入inputstream里面? 不用输出保存,只读入流中即可,怎么把图片快速读入输入流啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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的文件需要多少时间..很快的... 4096只是各种书上的推荐值. 其实每一次只搬4096(4k)对于现在的机器配置以及JDK1.3以上来说有些小气了。这样会因为while而消耗CPU时间.如果文件不超过512K, 直接拿文件的length()做buffer的大小如果超过了,最好用512K的倍数,映像中java的堆是按这个数分配的.----早在win2k时代 10M以下文件在MSDOS复制时的默认缓存就已经是32K 主要是在android设备上跑,主频是1G的。我也就是下载一些图标,每个8K左右。但是数量众多。1G主频用文件的length做buffer应该毫无压力的吧。 1G的主频的 android,8K左右的图片,应该是无压力的.-----I/O其实和CPU的速度没多大关系,buffer是在内存而不在CPU中,简单I流程是这样的: 程序说 要读入一段数据, CPU在某个CPU时刻(存在调度)接到这个命令后 发出命令到总线(一种硬件)说:给偶分配多少空间然后给偶读数据填满它,好了通知偶. 然后CPU就干其它事了,在某个时间总线通知CPU说完了,然后CPU中断正在做的事转而处理程序的下一条命令.(反过来就是O流程)总线才是压力的唯一来源[即更换CPU并不能带来太多的性能提升的原因:它只减少了命令在等待处理的时间及在CPU上处理的的时间].===关于4096补充一下,它是NTFS的默认簇大小.但Java并不直接操作硬件,这个值应该是"抄"来的 JPanel的问题,求教! java swing 图片输出 怎么把数据库读取的数据放入列表框???????[[ 用java.io包创建了一个file目录,为啥在系统里搜索不到? GUI中窗体边框图标的更改 请问:关于布局管理器的问题 jni.cpp 里的问题在Google上搜了2天找不到答案,先寄希望与各位老兄。 java 包问题 Struts中public ActionForward execute()方法问题. 一个JAVA初学者的困惑!!! 请问下为什么下面代码只打印了一次 java中HashSet与Iterator
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的文件需要多少时间..很快的...
其实每一次只搬4096(4k)对于现在的机器配置以及JDK1.3以上来说有些小气了。这样会因为while而消耗CPU时间.
如果文件不超过512K, 直接拿文件的length()做buffer的大小
如果超过了,最好用512K的倍数,映像中java的堆是按这个数分配的.
----
早在win2k时代 10M以下文件在MSDOS复制时的默认缓存就已经是32K
-----
I/O其实和CPU的速度没多大关系,buffer是在内存而不在CPU中,
简单I流程是这样的: 程序说 要读入一段数据, CPU在某个CPU时刻(存在调度)接到这个命令后 发出命令到总线(一种硬件)说:给偶分配多少空间然后给偶读数据填满它,好了通知偶. 然后CPU就干其它事了,在某个时间总线通知CPU说完了,然后CPU中断正在做的事转而处理程序的下一条命令.(反过来就是O流程)
总线才是压力的唯一来源[即更换CPU并不能带来太多的性能提升的原因:它只减少了命令在等待处理的时间及在CPU上处理的的时间].
===
关于4096补充一下,它是NTFS的默认簇大小.但Java并不直接操作硬件,这个值应该是"抄"来的