来自文件 或 网络的InputStream数据量可能很大,如果用流的大小申请byte[],可能内存不足报错。
解决方案:分段读取
InputStream的方法int available()返回本次可读取的流的大小。如果可读大小大于缓冲大小,那么每次只读缓冲大小的数据,读n次后再读余下的
,如果可读数小于缓冲大小,那么读全部可读大小。
如:
public static final int MAX_BUFFER = 1024*512;//512k,可以调小,太大会内存不足
1 void save_to_file(InputStream is, long fileSize) throws IOException { 2 File file = new File(Downloader.FILE_PATH, mFileName); 3 FileOutputStream fos = new FileOutputStream(file, true); 4 long sz = 0; 5 byte buffer[] = new<