我在使用二进制文件加载应用程序时出现问题。我试图从二进制文件中读取并将数据注入我的应用程序中的一些HashMaps / ArrayLists。
public void loadBinary(String filename) {
InputStream input = getClass().getResourceAsStream(filename);
try (ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(input))) {
// TODO
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
它指向相当长的行
try (ObjectInputStream in ... ) {
是它抛出异常的地方。
Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Stream closed
他们如何“打开”流/修复此问题?谢谢!
编辑:
更多错误
Caused by: java.io.IOException: Stream closed
at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:159)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2313)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2326)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2797)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:802)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at model.Model.loadBinary(Model.java:245)
... 7 more
答案 0 :(得分:2)
来自BufferedInputStream.getInIfOpen()
[版权所有(c)2006,Oracle和/或其关联公司。保留所有权利。] [在合理使用下引用]:
private InputStream getInIfOpen() throws IOException {
InputStream input = in;
if (input == null)
throw new IOException("Stream closed");
return input;
}
非常奇怪的代码。它应该抛出NullPointerException.
可能它正在重载null
以表示关闭,这是不好的做法。
无论如何,这都是导致问题的原因。资源未找到,因此input
为空。您应该在创建ObjectInputStream.
答案 1 :(得分:0)
我现在解决了。问题非常愚蠢,但仍然存在问题。
当我将方法二进制文件作为文件时,路径应为“folder / sub-folder / file.bin”,但作为InputStream,它应该只读“/sub-folder/file.bin”。 / p>
任何人都可以详细说明为什么它的结构如此?