ObjectInputStream доволен FileInputStream, не доволен getResourceAsStream

У меня есть довольно стандартный код, который принимает сериализованный объект из потока, который в основном выглядит так:

  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 ...

14
задан barryred 24 March 2011 в 15:56
поделиться