若希望将创建的对象保存在磁盘中,且下次可再次使用,可使用对象的序列化办法
一、ObjectOutput,对象的序列化:将内存中的对象写入磁盘文件中;
二、ObjectInput,对象的反序列化:将磁盘文件中的数据转换为内存对象;
三、欲序列化的对象需实现Serialzable接口;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
@AllArgsConstructor
@Setter
@Getter
@ToString
public class User implements Serializable {
private static final long serialVersionUID = 8680557217332017951L;
private String name;
private String password;
}
四、创建了一个User类,实现了Serialzable接口;
import java.io.*;
import java.util.Scanner;
public class testRegister {
private static void method(File file)
{
Scanner sc=new Scanner(System.in);
System.out.println("注册------>\n输入用户名:");
String name=sc.nextLine();
System.out.println("输入密码:");
String password=sc.nextLine();
try (ObjectOutput objectOutput=new ObjectOutputStream(new FileOutputStream(file,true)) {
})
{
User user=new User(name,password);
objectOutput.writeObject(user);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("注册成功!");
sc.close();
}
public static void main(String[] args) {
String s="D:\\Homework\\day0711\\src\\login\\UserInfo.txt";
method(new File(s));
}
}
五、在try…with块中ObjectOutputStream实现了ObjectOutput接口,其构造通过FileOutputStream类完成;
六、objectOutput对象使用writeObject方法将user对象的变量写入了UserInfo.txt文件中;以上完成了对象的序列化;
import java.io.*;
import java.util.Scanner;
public class testLogin {
private static void method(File file,String name,String password)
{
try (ObjectInput objectInput=new ObjectInputStream(new FileInputStream(file)))
{
User user=(User) objectInput.readObject();
System.out.println(user);
if (!name.equals(user.getName()) || !password.equals(user.getPassword()))
{
System.out.println("用户名或密码错误,登录失败!");
return;
}
System.out.println("登录成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String s="D:\\Homework\\day0711\\src\\login\\UserInfo.txt";
Scanner sc=new Scanner(System.in);
System.out.println("登录------>\n输入用户名:");
String name=sc.nextLine();
System.out.println("输入密码:");
String password=sc.nextLine();
method(new File(s),name,password);
}
}
七、ObjectInputStream实现类的对象objectInput,通过readObject方法,将UserInfo.txt中的User类信息读取出来,完成了对象的反序列化。