zoukankan      html  css  js  c++  java
  • java基础 序列化反序列化流 实现Serializable 接口 自动装载序列号到对象文本文件如修改不能反序列化对象文本,除非自定义long型常量 打印流

    package com.swift.baseKnowledge;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.ObjectInputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    
    /*现有一字符串:”我爱Java”。将该字符串保存到当前项目根目录下的a.txt文件中。要求:使用utf8编码保存。
    操作步骤描述
    1.创建文件字节输出流关联目标文件
    2.根据文件字节输出流创建转换输出流对象,并指定编码字符集为:uft8
    3.调用流对象的方法将字符串写出到文件中。
    4.关闭流并释放资源。*/
    
    /*利用转换输入流将当前项目根目录下使用utf8编码的a.txt文件的内容读取出来,并打印在控制台上。要求:不能出现乱码的情况。
        操作步骤描述
    1.创建字节输入流对象指定文件路径。
    2.根据字节输入流对象创建转换输入流对象并指定字符集编码为:utf8
    3.调用转换输入流对象的读取方法读取内容
    4.关闭流释放资源*/
    
    /*定义一个学生类,包含姓名,年龄,性别等成员变量,提供setters和getters方法以及构造方法。在测试类中创建一个学生对象,给学生对象的三个成员变量赋值。然后将该对象序列化到当前项目根目录下的stu.txt文件中。
    操作步骤描述
    1.定义学生类并实现序列化接口和测试类
    2.在测试类中创建学生对象
    3.创建文件字节输出流对象并关联目标文件
    4.根据文件字节输出流对象创建对象输出流对象
    5.调用对象输出流对象的方法将学生对象保存到文件中
    6.关闭流释放资源*/
    
    /*将需求4中序列化到stu.txt文件中的学生对象读取出来。
    操作步骤描述
    1.创建文件字节输入流对象关联目标文件
    2.根据文件字节输入流对象创建对象输入流对象
    3.调用对象输入流对象的方法从文件中获取学生对象
    4.关闭流释放资源。*/
    
    /*1.请简述下打印流的特点及打印流的分类
    2.从键盘录入一行字符串,利用字节打印流将该行字符串保存到当前项目根目录下的d.txt文件中
        操作步骤描述
        2.1.创建字节打印流对象并关联文件路径
        2.2.调用字节打印流对象的打印方法将内容输入到目标文件中
        2.3.关闭流释放资源
    3.请简述下配置classpath添加jar包到项目中的步骤
    4.通过Commons-IO完成文件复制的功能*/
    
    import java.io.Serializable;
    
    public class Xuliehua implements Serializable{
    
        public static void main(String[] args) throws IOException, ReflectiveOperationException {
            
            OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8");
            osw.write("我爱Java");
            osw.flush();
            osw.close();
            
            InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),"utf-8");
            char[] chars=new char[1024];
            StringBuilder sb=new StringBuilder();
            int len;
            while((len=isr.read(chars))!=-1) {
                sb.append(chars, 0, len);
            }
            System.out.println(sb);
            
    //        Student stu=new Student();
    //        stu.setName("张三");
    //        stu.setAge(20);
    //        stu.setSex("男");
    //        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("stu.txt"));
    //        oos.writeObject(stu);
    //        oos.flush();
    //        oos.close();
            
            ObjectInputStream ois=new ObjectInputStream(new FileInputStream("stu.txt"));
            Object obj=ois.readObject();
            System.out.println(obj);
            
            
            System.out.println(System.out);
            //始终是true 默认选项,所以不需要写也自动刷
            PrintStream p=new PrintStream(System.out,true);
            p.println("Hello");
            p.println("How are you");
            PrintStream ps=new PrintStream(new File("d.txt"));
            ps.println("what should I do for tomorrow.");
            ps.close();
            //必须写true才自动刷,否则不自动刷新
            PrintWriter pw=new PrintWriter(System.out,true);
            pw.println("what");
            pw.println("is");
            pw.close();
            
            
            //静态的不能被序列化 因为序列化的内容为对象,静态的由类直接调用,不属于对象序列,所以不被序列化
            
            //不定义静态,age也不想序列化 transient transient transient 阻止变量被序列化
            
            //Serializable 标记型接口
            
            //序列化后,如果修改代码,不再重新序列化,则出现 InvalidClassException  序列号冲突异常
            
            //即使改了源代码,反序列化也成功运行 成员属性加 static final long SeriaVersionUID=42L; 或者点类上的黄线
            
            //打印流应用于javaWeb 可以自刷新,原样打印  char[] 数组直接打印 String直接打印  其他数组打印哈希值
            
            //CommonsiO 第三方工具
        }
    
    }
  • 相关阅读:
    哈希算法(Hash Algorithm)初探
    一本计划中的WPF图书目录
    php中关于mysqli和mysql区别的一些知识点整理
    PHP Plurk Api基�教�(一)
    Wordpress 去除重复评论限制
    [share]PDO操作MySql类
    PHP处理文件(转载)
    PHP 取得某天前后N天的日期
    源码搭建LAMP服务器
    PHP ��/日期操作��
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8521702.html
Copyright © 2011-2022 走看看