У меня есть довольно стандартный код, который берет сериализованный объект из потока, который в основном выглядит следующим образом:
Object getObjectFromStream(InputStream is) { ObjectInputStream ois = new ObjectInputStream(is); return ois.readObject(); }
Затем у меня есть файл в папке моих ресурсов, поэтому на моей машине разработки я могу либо ссылаться на него как на файл, либо как на JarResource:
InputStream is = new FileInputStream("/home/.../src/main/resources/serializedObjects/testObject"); InputStream is = this.getClass().getResourceAsStream("/serializedObjects/testObject");
В моей голове оба должны делать то же самое. Однако, как это происходит, оба разрешают действительный (не нулевой) поток, но FileInputStream корректно возвращает объект из моего метода getObjectFromStream (InputStream), в то время как версия getResourceAsStream выдает это исключение:
java.io.StreamCorruptedException: invalid stream header: EFBFBDEF at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:800) at java.io.ObjectInputStream.(ObjectInputStream.java:297)
В основном, я хотел бы знать, как это исправить, но я также хотел бы узнать разницу между двумя InputStreams...