我对 android 很陌生,我只是在摸索它的表面。当我浏览一些教程时,我遇到了这个类来下载文件。我能够理解其他代码,但我无法理解是什么 private static final int MEGABYTE = 1024 * 1024;做?这真的有必要吗?如果它没有被声明为 First。下面是代码public class FileDownloader { private static final int MEGABYTE = 1024 * 1024; public static void downloadFile(String fileUrl, File directory){ try { URL url = new URL(fileUrl); HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection(); //urlConnection.setRequestMethod("GET"); //urlConnection.setDoOutput(true); urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); FileOutputStream fileOutputStream = new FileOutputStream(directory); int totalSize = urlConnection.getContentLength(); byte[] buffer = new byte[MEGABYTE]; int bufferLength = 0; while((bufferLength = inputStream.read(buffer))>0 ){ fileOutputStream.write(buffer, 0, bufferLength); } fileOutputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}这一定是非常愚蠢的问题,但我真的很想知道如何以及为什么?
2 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
该private static final
声明意味着,该值被声明为常量。它没有什么特别之处,将硬编码值作为常量放置只是一种很好的编码习惯。这是为了代码的可读性和可维护性。
您的代码基本上是创建一个1 MB的缓冲区来下载文件。
这意味着在下载文件时,首先将 1 MB 下载到您的 RAM 中,然后将该部分复制到文件输出流(磁盘),这个过程将重复,直到所有内容都下载完毕。请注意,如果所有内容都下载到 RAM,您的设备可能会耗尽内存并且应用程序会抛出OutOfMemoryError
. 另请注意,您可以为缓冲区选择任何值而不是 1 MB。
添加回答
举报
0/150
提交
取消