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 第三方工具 } }
Never waste time any more, Never old man be a yong man