gpt4 book ai didi

java - ObjectInputStream 和二进制数据

转载 作者:行者123 更新时间:2023-11-30 03:25:59 27 4
gpt4 key购买 nike

我在使用二进制文件加载应用程序时遇到问题。我正在尝试从二进制文件中读取数据并将数据注入(inject)到我的应用程序中的一些 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

最佳答案

来自 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 之前检查这一点。

关于java - ObjectInputStream 和二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com