Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用OkHttp将大量图像下载到sd卡_Android_Image_Performance_Okhttp - Fatal编程技术网

Android 使用OkHttp将大量图像下载到sd卡

Android 使用OkHttp将大量图像下载到sd卡,android,image,performance,okhttp,Android,Image,Performance,Okhttp,因此,我的应用程序的一部分使用IntentService将大量(约1600)图像下载到SD卡。我以前使用过Glide,但现在想切换到OkHttp,因为它看起来更快,而且电池消耗更少。这是我当前的代码: for (int i = 1; i < 1600; i++) { try { Request request = new Request.Builder() .url(imageUrls[i])

因此,我的应用程序的一部分使用IntentService将大量(约1600)图像下载到SD卡。我以前使用过Glide,但现在想切换到OkHttp,因为它看起来更快,而且电池消耗更少。这是我当前的代码:

for (int i = 1; i < 1600; i++) {
        try {
            Request request = new Request.Builder()
                    .url(imageUrls[i])
                    .build();

            Response response = client.newCall(request).execute();
            File testDirectory = new File(Environment.getExternalStorageDirectory() 
                                                                  + "/downloadTest");
            if (!testDirectory.exists())
                 testDirectory.mkdirs();
            OutputStream outputStream = new FileOutputStream(new File(testDirectory, 
                                                          "testImage" + i + ".png"));
            InputStream inputStream = response.body().byteStream();
            byte[] buffer = new byte[1024];
            int read;
            while ((read = inputStream.read(buffer, 0, buffer.length)) >= 0)
                outputStream.write(buffer, 0, read);
            outputStream.flush();
            outputStream.close();
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
for(int i=1;i<1600;i++){
试一试{
Request Request=newrequest.Builder()
.url(imageUrls[i])
.build();
Response=client.newCall(request.execute();
File testDirectory=新文件(Environment.getExternalStorageDirectory()
+“/下载测试”);
如果(!testDirectory.exists())
testDirectory.mkdirs();
OutputStream OutputStream=新文件OutputStream(新文件(testDirectory,
“testImage”+i+“.png”);
InputStream InputStream=response.body().ByTestStream();
字节[]缓冲区=新字节[1024];
int-read;
而((read=inputStream.read(buffer,0,buffer.length))>=0)
写入(缓冲区,0,读取);
outputStream.flush();
outputStream.close();
inputStream.close();
}捕获(例外e){
e、 printStackTrace();
}
}
有没有办法优化这段代码,让下载速度更快

最简单的方法是:

InputStream inputStream = response.body().byteStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
并将位图另存为jpg:

File file = new File (myDir, fname);
if (file.exists ()) file.delete (); 
try {
       FileOutputStream out = new FileOutputStream(file);
       finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
       out.flush();
       out.close();

} catch (Exception e) {
       e.printStackTrace();
}
最简单的方法是:

InputStream inputStream = response.body().byteStream();
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
并将位图另存为jpg:

File file = new File (myDir, fname);
if (file.exists ()) file.delete (); 
try {
       FileOutputStream out = new FileOutputStream(file);
       finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
       out.flush();
       out.close();

} catch (Exception e) {
       e.printStackTrace();
}
您可以使用而不是
InputStream
/
OutputStream
来保存一些副本。大概是这样的:

BufferedSink sink = Okio.buffer(Okio.sink(new File(testDirectory, "testImage" + i + ".png")));
sink.writeAll(response.body().source());
sink.close();
response.body().close();
请参阅,以了解为什么速度更快。

您可以使用而不是
输入流
/
输出流
来保存一些副本。大概是这样的:

BufferedSink sink = Okio.buffer(Okio.sink(new File(testDirectory, "testImage" + i + ".png")));
sink.writeAll(response.body().source());
sink.close();
response.body().close();

请参阅以了解为什么这样做更快。

仅解码位图以在向下压缩后再次压缩它不是效率低下吗?您需要在某个地方获取位图。如果要加快下载速度,可以使用多个异步任务。我希望我能帮助你。:)解码位图只是为了再次压缩它不是效率低下吗?在某个地方你需要得到位图。如果要加快下载速度,可以使用多个异步任务。我希望我能帮助你。:)链接不再起作用了。。这一个不起作用了,链接不起作用了。。这个有