一、今日学习的内容:
今日学习了12.2.5Scanner类和12.2.6序列化与反序列化的内容。
二、遇到的问题:
无。
三、明日计划:
明天计划学习12.2.7打印流的内容和12.2.8Random AccessFile随机访问文件的内容。
今天学习的具体内容:
1.Scanner类
Scanner类主要用来从键盘输入数据,其中该类是在Java.util包中定义的的。
实例——Scanner类的应用
import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner con=new Scanner(System.in); String s=con.nextLine(); int a=con.nextInt(); double d=con.nextDouble(); System.out.println(s); System.out.println(a); System.out.println(d); con.close(); } }
测试截图:
2.对象序列化和反序列化
(1)序列化
定义:就是将一个在内存中保存的对象变成一个二进制数据流进行传输。如果一个对象需要被序列化则对象所在的类必须实现Serializable接口,此接口中没有任何的方法定义,是作为标识接口出现的。
实例——将实体类标注为可以序列化
import java.io.Serializable; public class SerializableDemo implements Serializable{ String name; int age; public String getName() { return this.name; } public int getAge() { return this.age; } public void setName(String name) { this.name=name; } public void setAge(int age) { this.age=age; } public String toString() { return "姓名:"+name+" 年龄:"+age; } } import java.io.IOException; import java.io.FileOutputStream; import java.io.ObjectOutputStream; public class ObjectOutputStreamDemo { public static void main(String[] args) throws IOException{ ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("D:\\people.txt")); SerializableDemo s=new SerializableDemo(); s.setAge(18); s.setName("张三"); oos.writeObject(s); oos.close(); System.out.println("写入完毕!"); } }
(2)反序列化
反序列化是将文件中读取对象的过程,使用ObjectInputStream可以实现反序列化。
import java.io.Serializable; public class SerializableDemo implements Serializable{ String name; int age; public String getName() { return this.name; } public int getAge() { return this.age; } public void setName(String name) { this.name=name; } public void setAge(int age) { this.age=age; } public String toString() { return "姓名:"+name+" 年龄:"+age; } } import java.io.IOException; import java.io.FileInputStream; import java.io.ObjectInputStream; public class ObjectInputStreamDemo { public static void main(String[] args)throws IOException, ClassNotFoundException{ ObjectInputStream ois=new ObjectInputStream(new FileInputStream("D:\\people.txt")); SerializableDemo S=(SerializableDemo)ois.readObject(); ois.close(); System.out.println(S); } }
测试截图:
(3)序列化一组对象
若想序列化多个对象,可以使用数组解决。
实例——序列化多个对象
import java.io.Serializable; public class SerializableDemo implements Serializable{ String name; int age; public String getName() { return this.name; } public int getAge() { return this.age; } public void setName(String name) { this.name=name; } public void setAge(int age) { this.age=age; } public String toString() { return "姓名:"+name+" 年龄:"+age; } } import java.io.IOException; import java.io.ObjectOutputStream; import java.io.FileOutputStream; public class ObjectOutputStreamDemo2 { public static void main(String[] args) throws IOException{ ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("D:\\people.txt")); SerializableDemo s1=new SerializableDemo(); s1.setAge(18); s1.setName("张三"); SerializableDemo s2=new SerializableDemo(); s2.setAge(43); s2.setName("李四"); SerializableDemo []ss= {s1,s2}; oos.writeObject(ss); oos.close(); System.out.println("写入完毕!"); } }