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
答案 0 :(得分:0)
您不能从SequenceInputStream构造ObjectInputStream,因为每个文件都以特殊的文件头开头,以指示它是Java Object流。如果使用SequenceInputStream,则在流的中间意外遇到第二个文件的标头。
您必须为每个文件构造单独的ObjectOutputStream实例。
顺便说一句,基于您的代码的一些注释:
使用Java代码样式约定。周围有一些不同的约定,但是它们只是在次要细节上有所不同,所有约定都遵循该约定。 Google在“ Java代码样式约定”中找到了一些。使用公认的约定可以帮助其他人理解您的代码。
给出变量和类的描述性名称(例如,类UserData代替One,userDataArray代替Object)。
了解单一责任原则。您的班级一件事似乎不止两件事:保存数据并进行输入/输出。
您可能不应该使用扩展名为“ .txt”的文件,因为它们不是文本文件。它们是具有特定于Java ObjectInputStream的特殊格式的二进制文件。