如何在Java中使用SequenceInputStream从两个不同的文件中读取两个对象

时间:2018-12-05 15:38:51

标签: java

FileInputStream FIS1=new FileInputStream("f1.txt");
FileInputStream FIS2=new FileInputStream("f2.txt");
SequenceInputStream SIS=new SequenceInputStream(FIS1,FIS2);
ObjectInputStream OIS=new ObjectInputStream(SIS);
Object[0]=(One)OIS.readObject();
Object[1]=(One)OIS.readObject(); //this line give error

错误是

  

线程“主”中的异常java.io.StreamCorruptedException:无效   类型代码:AC at   java.base / java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1622)     在   java.base / java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)     在Main.main(Main.java:33)

如何解决此问题,请帮助我,我是Java新手。
Full Code and Error

1 个答案:

答案 0 :(得分:0)

您不能从SequenceInputStream构造ObjectInputStream,因为每个文件都以特殊的文件头开头,以指示它是Java Object流。如果使用SequenceInputStream,则在流的中间意外遇到第二个文件的标头。

您必须为每个文件构造单独的ObjectOutputStream实例。

顺便说一句,基于您的代码的一些注释:

  1. 使用Java代码样式约定。周围有一些不同的约定,但是它们只是在次要细节上有所不同,所有约定都遵循该约定。 Google在“ Java代码样式约定”中找到了一些。使用公认的约定可以帮助其他人理解您的代码。

  2. 给出变量和类的描述性名称(例如,类UserData代替One,userDataArray代替Object)。

  3. 了解单一责任原则。您的班级一件事似乎不止两件事:保存数据并进行输入/输出。

  4. 您可能不应该使用扩展名为“ .txt”的文件,因为它们不是文本文件。它们是具有特定于Java ObjectInputStream的特殊格式的二进制文件。