Java 反序列化二进制文件时出现堆栈溢出错误
所以我试图将信息保存到一个对象数组列表中,但一切正常,每当我尝试加载以前保存的数组列表时,我都会收到一个堆栈溢出错误 我猜我需要某种计数器,但是,我不太熟悉java和反序列化程序的工作原理。我已经附上我的代码如下-任何帮助将不胜感激Java 反序列化二进制文件时出现堆栈溢出错误,java,deserialization,binaryfiles,Java,Deserialization,Binaryfiles,所以我试图将信息保存到一个对象数组列表中,但一切正常,每当我尝试加载以前保存的数组列表时,我都会收到一个堆栈溢出错误 我猜我需要某种计数器,但是,我不太熟悉java和反序列化程序的工作原理。我已经附上我的代码如下-任何帮助将不胜感激 ArrayList<Car> cars = new ArrayList<Car>(); public void addCar { System.out.println("What is the make of the car?")
ArrayList<Car> cars = new ArrayList<Car>();
public void addCar
{
System.out.println("What is the make of the car?");
String newMake = scan.next();
System.out.println("What is the model of the car?");
String newModel = scan.next();
System.out.println("What year was the car produced?");
String newYear = scan.next();
System.out.println("How far has this car traveled?");
String newOdometer = scan.next();
cars.add(new Car(newMake, newModel, newYear, newOdometer));
}
public void openFile()
{
Car cars = new Car();
try {
FileInputStream fileIn = new FileInputStream("testSave.plzwork");
ObjectInputStream in = new ObjectInputStream(fileIn);
try {
cars = (Car)in.readObject();
} catch (ClassNotFoundException ex) {
Logger.getLogger(carClass.class.getName()).log(Level.SEVERE, null, ex);
}
in.close();
fileIn.close();
}
catch (IOException i) {
i.printStackTrace();
}
}
编辑2
这是汽车级别
public Car(String year, String odometer, String make, String model)
{
this.make = make;
this.model = model;
this.year = year;
this.odometer = odometer;
}
下面是Netbeans正在抛出的错误
线程“main”java.lang.StackOverflowerr中出现异常
位于java.base/java.lang.AbstractStringBuilder.setLength(AbstractStringBuilder.java:277)
位于java.base/java.lang.StringBuffer.setLength(StringBuffer.java:233)
位于java.base/java.text.DecimalFormat.expandAffix(DecimalFormat.java:2978)
位于java.base/java.text.DecimalFormat.expandAffixes(DecimalFormat.java:2946)
位于java.base/java.text.DecimalFormat.applyPattern(DecimalFormat.java:3632)
位于java.base/java.text.DecimalFormat.(DecimalFormat.java:466)
位于java.base/sun.util.locale.provider.NumberFormatProviderImpl.getInstance(NumberFormatProviderImpl.java:187)
位于java.base/sun.util.locale.provider.NumberFormatProviderImpl.getNumberInstance(NumberFormatProviderImpl.java:151)
位于java.base/java.text.NumberFormat.getInstance(NumberFormat.java:969)
位于java.base/java.text.NumberFormat.getInstance(NumberFormat.java:953)
位于java.base/java.text.NumberFormat.getNumberInstance(NumberFormat.java:518)
位于java.base/java.util.Scanner.useLocale(Scanner.java:1270)
位于java.base/java.util.Scanner(Scanner.java:543)
位于java.base/java.util.Scanner(Scanner.java:566)
在pkg300000969carsarraylist.Car.(Car.java:29)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
在pkg300000969carsarraylist.Car.(Car.java:46)
你需要看电视
确定了代码中的以下问题
Serializable
接口公共类汽车实现可序列化{
私人字符串制作;
私有字符串模型;
私人弦年;
专用弦式里程表;
公共汽车(){}
公共汽车(串年、串里程表、串品牌、串型号)
{
make=make;
this.model=模型;
今年=年;
这个。里程表=里程表;
}
}
cars=(Car)in.readObject()代码>
到
.readObject()中的ArrayList cars=(ArrayList)代码>
公共汽车(字符串年份、字符串里程表、字符串品牌、字符串型号)
vs
cars.add(新车(新品牌、新车型、新年份、新里程计))代码>
因此,您的映射将是
新建-->年份,
新型号-->里程表,
新年-->制作,
新里程计-->型号
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.util.ArrayList;
导入java.util.Scanner;
导入java.util.logging.Level;
导入java.util.logging.Logger;
公共类JavaBinaryFile{
静态ArrayList cars=新ArrayList();
公共静态void main(字符串[]args){
addCar();
saveFile();
openFile();
}
公共静态void addCar(){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“这辆车是什么牌子的?”);
字符串newMake=scan.next();
System.out.println(“汽车的型号是什么?”);
字符串newModel=scan.next();
System.out.println(“这辆车是哪一年生产的?”);
字符串newYear=scan.next();
System.out.println(“这辆车走了多远?”);
字符串newOdometer=scan.next();
添加(新车(新品牌、新车型、新年份、新里程计));
}
公共静态void openFile(){
试一试{
FileInputStream fileIn=newfileinputstream(“testSave.plzwork”);
ObjectInputStream in=新的ObjectInputStream(fileIn);
试一试{
ArrayList cars=(ArrayList)在.readObject()中;
}捕获(ClassNotFoundException ex){
Logger.getLogger(Car.class.getName()).log(Level.SEVERE,null,ex);
}
in.close();
fileIn.close();
}捕获(IOI异常){
i、 printStackTrace();
}
}
公共静态void保存文件(){
试一试{
FileOutputStream fileOut=新的FileOutputStream(“testSave.plzwork”);
ObjectOutputStream out=新的ObjectOutputStream(fileOut);
out.writeObject(汽车);
out.close();
fileOut.close();
System.out.println(“保存序列化数据”);
}捕获(IOI异常){
i、 printStackTrace();
}
}
}
反序列化文件直接取决于“在该文件中序列化的方式和内容”。所以,为了判断您为什么会遇到这种异常,我需要您的序列化代码。请让我知道你是如何序列化数组列表的。你能分享Car类的代码吗你能分享Car
类的代码吗?还指示Car.java
的第29行和第46行?
public Car(String year, String odometer, String make, String model)
{
this.make = make;
this.model = model;
this.year = year;
this.odometer = odometer;
}