【问题标题】:difference between FileInputStream and ClassLoader.getSystemResourceAsStreamFileInputStream 和 ClassLoader.getSystemResourceAsStream 的区别
【发布时间】:2015-01-09 22:01:02
【问题描述】:

奇怪的问题,我验证它正在读取同一个文件。

不起作用

keystore = KeyStore.getInstance("PKCS12");
InputStream inputStream = ClassLoader.getSystemResourceAsStream("keystores/active.pfx");
keystore.load(inputStream, "the_password".toCharArray());

然而,这确实有效:

keystore = KeyStore.getInstance("PKCS12");
InputStream inputStream = new FileInputStream(new File("src/main/resources/keystores/active.pfx"));
keystore.load(inputStream, "the_password".toCharArray());

我收到以下错误:

DER 长度超过 4 个字节:111

就是输入流的变化,我不知道有什么区别。我对文件进行了三次检查,以确保它使用的是同一个文件。为什么 Java 以不同的方式处理这些流?如果我弄清楚了,我可能会弄清楚如何解决这个问题。

【问题讨论】:

  • 为什么 Java 对这些流的处理方式不同? 你为什么认为它们应该做同样的事情?
  • 我的建议,阅读 API。假设您知道它们的作用,您正在使用类。如果您阅读 API,您会发现问题一点也不奇怪。
  • 类路径中的文件已损坏,请检查其大小stackoverflow.com/questions/19500458/…

标签: java inputstream keystore fileinputstream


【解决方案1】:

这两种方法读取的不是完全相同的文件。资源代码从 JAR 文件或类编译到的任何位置读取它。显然,文件在构建过程中以某种方式损坏。

【讨论】:

  • 就是这样。我检查了构建过程,它在打包过程中被损坏了。
猜你喜欢
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 2019-06-01
相关资源
最近更新 更多