У меня есть довольно стандартный код, который принимает сериализованный объект из потока, который в основном выглядит так:
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 ...