gpt4 book ai didi

java - 家庭作业! ObjectInputStream(new FileInputStream ("filename") 永远不会停止读取

转载 作者:行者123 更新时间:2023-12-01 12:40:05 26 4
gpt4 key购买 nike

郑重声明,这是我的 Java 编程作业。这是一个简单的输出一些数据到文件并在类型分配中读回它。我已经在之前的类(class)中完成了对文本文件的简单写入,因此我想让这一类(class)变得更加困难。在我的书中有一个主题是关于使用 ObjectOutputStream(new FileInputStream);ObjectInputStream(new FileInputStream) 来读取和写入完整的对象。现在,我确信我正在向该文件写入 2 个对象,前几次测试我只写入了一个,然后在写入 2 个时看到字节大小加倍。这两个对象属于相同类型。当我尝试在程序中读回它们时,程序会卡在文件中的第一个对象上,永远不会移动到下一个对象,也永远不会抛出 EOFException 来显示文件末尾。现在我很困惑。我检查并重新检查了书中的示例并在线搜索,我不明白为什么我无法在这些对象中读回。我还有足够的时间来完成这项作业,所以我不担心能否按时完成。

 import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


public class TextFileIO {
static int[] evenNumbers = new int[50];
static int[] oddNumbers = new int[50];
public static void main(String[] args) {

int evenCount = 0;
int oddCount = 0;
for(int i = 0; i < 100; i++){
if(i % 2 == 0){
evenNumbers[evenCount] = i;
evenCount++;
}
else{
oddNumbers[oddCount] = i;
oddCount++;
}
}
ArraySerializable even = new ArraySerializable(evenNumbers);
ArraySerializable odd = new ArraySerializable(oddNumbers);

writeToFile(even, odd);


readFile();
}

public static void writeToFile(ArraySerializable array, ArraySerializable array2){
try {
ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("numbers.dat"));
output.writeObject(array);
output.writeObject(array2);
output.close();
} catch (IOException e) {

e.printStackTrace();
}
}

public static void readFile(){

ObjectInputStream input = null;
try{
while(true){
input = new ObjectInputStream(new FileInputStream("numbers.dat"));
ArraySerializable array;
array = (ArraySerializable) input.readObject();
int[] numbers = array.getNumbers();
for (int i = 0; i < numbers.length; i++){
System.out.print(numbers[i] + " ,");
}
}
}catch(FileNotFoundException | ClassNotFoundException |EOFException ex){
ex.printStackTrace();
return;
}catch(IOException ex){
ex.printStackTrace();
}
try {
input.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

和我的 ArraySerialized 类:

 import java.io.Serializable;


public class ArraySerializable implements Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;
private int[] numbers;

public ArraySerializable(int[] numbers){
this.numbers = numbers;
}

public int[] getNumbers(){
return numbers;
}

}

最佳答案

never stops reading

永远不会停止阅读。您打开文件,读取一个对象,关闭文件,打开文件,...

去掉“while (true)”。

如果您的目的是从同一文件中读取多个对象,请重构循环来执行此操作。具体来说,将 open 和 close 移到循环之外。

关于java - 家庭作业! ObjectInputStream(new FileInputStream ("filename") 永远不会停止读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com