Друзья. Я перешел на 20 уровень, прочитал первую лекцию. Приступил к задачам и не могу решить не одну. Первые две с горе пополам решил, а третью, вообще сам не смог. даже не знал с чего начать. Скопировал ее. вот она Это решение проходит вали, но я ег не могу понять. почему load /save сделаны именно так? Может кто то объяснить их логику?
package com.javarush.task.task20.task2003;

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/*
Знакомство с properties
*/
public class Solution {
    public static Map<String, String> properties = new HashMap<>();
    public static Properties props = new Properties();

    public void fillInPropertiesMap() throws Exception{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream in = new FileInputStream(reader.readLine());
        load(in);
        //implement this method - реализуйте этот метод
    }

    public void save(OutputStream outputStream) throws Exception {
        Properties tmp_properties = new Properties();
        for (Map.Entry<String, String> stringStringEntry : properties.entrySet()) {
            tmp_properties.put(stringStringEntry.getKey(), stringStringEntry.getValue());
        }
        tmp_properties.save(outputStream, null);
        outputStream.flush();

        //implement this method - реализуйте этот метод
    }

    public void load(InputStream inputStream) throws Exception {
       // BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        props.load(inputStream);
        Set<String> list = props.stringPropertyNames();
        for (String current : list)
            properties.put(current, props.getProperty(current));
      // bufferedReader.close();
        //implement this method - реализуйте этот метод
    }

    public static void main(String[] args) {

    }
}