序列化集合练习以及打印流的概述和使用

练习——序列化集合

当我们想在文件中保存多个对象的时候

可以把多个对象存储到一个集合中,对集合进行序列化和反序列化

分析:

  1.定义一个存储Person对象的ArrayLis

  2.往ArrayList集合中存储Person对象

  3.创建一个序列化流ObjectOutputStream

  4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化

  5.创建一个反序列化ObjectInputStream对象

  6.使用ObjectInputStream对象中的方法readObject方法读取文件中保存的集合

  7.把Object类型的集合转换为ArrayList类

  8.遍历ArrayList集合

  9.释放资源

复制代码
public class Person implements Serializable{
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
复制代码
复制代码
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //1.定义一个存储Person对象的ArrayList
        ArrayList<Person> list = new ArrayList<>();
        //2.往ArrayList集合中存储Person对象
        list.add(new Person("张三",18));
        list.add(new Person("李四",20));
        list.add(new Person("王五",26));
        //3.创建一个序列化流ObjectOutputStream
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("list.txt"));
        //4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化
        oos.writeObject(list);
        //5.创建一个反序列化ObjectInputStream对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("list.txt"));
        //6.使用ObjectInputStream对象中的方法readObject方法读取文件中保存的集合
        Object o = ois.readObject();
        //7.把Object类型的集合转换为ArrayList类型
        ArrayList<Person> list2 = (ArrayList<Person>)o;
        //8.遍历ArrayList集合
        for (Person person : list2) {
            System.out.println(person);
        }
        //9.释放资源
        oos.close();
        ois.close();
    }
复制代码

运行结果:

 

 

 

  

 

 

 

 

 

打印流的概述和作用

java.io.PrintStream:打印流
  PrintStream:为其他输出流添加了功能,使他们能够方便地打印各种数据值表示形式。
PrintStream特点:

  1.只负责数据的输出,不负责数据的读取

  2.与其他输出流不同,PrintStream永远不会抛出IOException

  3.特有的方法:print,println

    void print(任意类型的值)

    void println(任意类型的值并换行)

构造方法:

  PrintStream(File file):输出的目的地是一个文件

  PrintStream(OutputStream out):输出的目的地是一个字节输出流

  PrintStream(String fileName):输出的目的地是一个文件路径

继承自父类的成员方法
  PrintStream extends OutputStream

  public void close() :关闭此输出流并释放与此流相关联的任何系统资源。

  public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。

  public void write(byte[] b ) :将b.length字节从指定的字节数组写入此输出流。

  public void write(byte[] b,int off,int len):从指定的字节数组写入len字节,从偏移量off开始输出到此输出流。

  public abstract void write(int b) :将指定的字节输出流。

注意:

  如果使用继承自父类的write方法写数据,那么查看数据的时候会查询编码表 97–>a

  如果使用自己特有的方法print/println方法写数据,写的数据原样输出 97–>97

 

复制代码
    public static void main(String[] args) throws FileNotFoundException {
        //创建打印流PrintStream对象,构造方法中绑定要输出的目的地
        PrintStream ps = new PrintStream("print.txt");
        //如果使用继承自父类的write方法写数据,那么查看数据的时候会查询编码表 97->a
        ps.write(97);
        //如果使用自己特有的方法print/println方法写数据,写的数据按原样输出 97->97
        ps.println(97);
        ps.println(8.8);
        ps.println('a');
        ps.println("Hello");
        ps.println(true);

        //释放资源
        ps.close();
    }
复制代码

文件中的内容:

 

 

 

可以改变输出语句目的地(打印流的流向)

  输出语句,默认在控制台输出

  使用 System.setOut方法改变输出语句的目的地改为参数传递的打印流的目的地

  static void setOut(PrintStream out)
    重新分配“标准”输出流。

    public static void main(String[] args) throws FileNotFoundException {
        System.out.println("控制台输出");
        PrintStream ps = new PrintStream("print.txt");
        System.setOut(ps);//把输出语句的目的地改变为打印流的目的地
        System.out.println("在目的地中输出");
        ps.close();
    }

文件中的内容:

 

 

posted @   xjw12345  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示