猿问

Java 中的“private static final”是什么意思?

我对 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();

        }

    }

}

这一定是非常愚蠢的问题,但我真的很想知道如何以及为什么?



holdtom
浏览 1571回答 2
2回答

POPMUISE

该private static final声明意味着,该值被声明为常量。它没有什么特别之处,将硬编码值作为常量放置只是一种很好的编码习惯。这是为了代码的可读性和可维护性。您的代码基本上是创建一个1 MB的缓冲区来下载文件。这意味着在下载文件时,首先将 1 MB 下载到您的 RAM 中,然后将该部分复制到文件输出流(磁盘),这个过程将重复,直到所有内容都下载完毕。请注意,如果所有内容都下载到 RAM,您的设备可能会耗尽内存并且应用程序会抛出OutOfMemoryError. 另请注意,您可以为缓冲区选择任何值而不是 1 MB。
随时随地看视频慕课网APP

相关分类

Java
我要回答