我在这里要做的是从MySQL数据库中读取一些数据,并将它们转换为对象数据并将其序列化为文件。显然,它确实如此。但是我在控制台中得到一个空值,我无法理解它来自哪里。如果我检查错误本身,它会在以下行上显示:
pepi = (personita) ois.readObject();
您得到的输出是:
贝蒂,拉菲雷斯,87.0
马诺洛,洛佩兹,45.0
曼努埃尔,罗德里格斯,12.0
帕特里夏,阿隆索,12.0
空
那么,你能帮我理解为什么这条线会导致空问题吗?
public class practicabdyserializableobjetos {
public static void main(String[] args) throws ClassNotFoundException, IOException {
Class.forName("com.mysql.jdbc.Driver");
Connection conexion = null;
try {
conexion = DriverManager.getConnection("jdbc:mysql://localhost/programacion", "root", "password");
Statement sentencia = (Statement) conexion.createStatement();
ResultSet resultado = sentencia.executeQuery("Select * from ejemplo");
File persofiles = new File("./persofiles.txt");
if (!persofiles.exists())
persofiles.createNewFile();
FileOutputStream fioust = new FileOutputStream(persofiles);
ObjectOutputStream oboust = new ObjectOutputStream(fioust);
int p=0;
while (resultado.next()) {
personita per = new personita();
per.setNombre(resultado.getString(1));
per.setApellido(resultado.getString(2));
per.setEdad(resultado.getDouble(3));
oboust.writeObject(per);
}
oboust.close();
fioust.close();
FileInputStream fis = new FileInputStream(persofiles);
@SuppressWarnings("resource")
ObjectInputStream ois = new ObjectInputStream(fis);
while (true) {
personita pepi = new personita();
pepi = (personita) ois.readObject();
System.out.println(pepi.getNombre() + ", " + pepi.getApellido() + ", " + pepi.getEdad());
}
} catch (SQLException e) {
e.printStackTrace();
}
catch(EOFException e){
System.out.println(e.getMessage());
}
}
}
编辑 2 - 我改变了我的答案
看完这个问题
您的代码是正确的。你得到的空值是EOFException捕获中的e.getMessage((,你可以通过将System.println语句替换为';'来避免(。
}catch(EOFException e){
;
}
与我认为的相反,您不会在 steram 的内部读取空值,所以要知道何时到达流的末尾,您可以使用此 EOFException。在我提到的问题中,需要考虑一个因素,因为您掌握着 EOF 的提高是因为没有更多要读取的对象,还是因为存在错误并且流已关闭。