Java 从资源文件夹读取conf文件时出现意外结果

Java 从资源文件夹读取conf文件时出现意外结果,java,Java,我有以下java代码,它从资源文件夹中读取config.properties import java.io.InputStream; import java.util.Properties; public class TestProperties { static ClassLoader classloader = Thread.currentThread().getContextClassLoader(); static InputStrea

我有以下java代码,它从资源文件夹中读取
config.properties

 import java.io.InputStream;
 import java.util.Properties;

    public class TestProperties {

         static ClassLoader classloader = Thread.currentThread().getContextClassLoader();
         static InputStream input = classloader.getResourceAsStream("config.properties");

        public static void main(String[] args) throws InterruptedException {
            while (true) {
                new TestProperties().readPropertiesFile();
                Thread.sleep(2000);
            }
        }

        private void readPropertiesFile() {
            Properties properties = new Properties();

            try {
                properties.load(input);
                int threads = Integer.parseInt(properties.getProperty("num_of_workers"));
                System.out.println("num_of_workers: " + threads);
            } catch (Exception e) {
                System.out.println("hey something went wrong: " + e.getMessage());
            }
        }
    }
结果:

  • 工人数量:2
  • 嘿,出了点问题:空
  • 嘿,出了点问题:空
  • 嘿,出了点问题:空
它给我第一次迭代的结果(
num\u of\u worker:2
),但之后它给空值

但当我改变

  • 静态类加载器类加载器
    类加载器类加载器
  • 静态输入流输入
    输入流输入
我得到了预期的结果:

  • 工人数量:2
  • 工人数量:2
  • 工人数量:2
  • 工人数量:2

您能解释一下这种行为吗?

因为输入流只能使用一次,
在静态情况下,它只初始化一次,并且在第一次迭代中使用,但在非静态情况下,每次创建一个新实例时,它总是创建为新的。

consumed?它是否像队列一样工作(即,在使用它之后被删除),而不是像您在第一次迭代中使用它的队列管理员一样工作。一旦你使用了它,你就不能再简单地使用它了。如果您想再次阅读它,您需要重置它。您的意思是我们只能使用输入流一次暗示我们只能使用输入流一次,但如果您使用的是标记和重置方法,您可以重用它,但并非所有输入流都支持标记方法