FileInputStream和ClassLoader.getSystemResourceAsStream之间的区别

时间:2014-11-12 21:53:20

标签: java inputstream keystore fileinputstream

奇怪的问题,我确认它正在读同一个文件。

工作:

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对这些流的处理方式不同?如果我弄明白,我可能会弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

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