转换流:
FileReader读数据默认UTF-8,用他读GBK会乱码
InputStreamReader类:
Read的子类,字符输入流,继承AutoCloseable接口,不能单独使用,是一个包装流,将字节流转换成字符流
OutputStreamWriter类:
Writer的子类,字符输出流,继承AutoCloseable接口,不能单独使用,是一个包装流,将字节流转换为字符输出流,默认GBK加载输出
Ssystem.lineSeparator() //换行
打印流:
PrintStreaam(字节)
System.out.setOut() //把流对象替换
System.out.println()中out属于变量默认public static final修饰,初值为null,属于PrintStream,PrintStream属于FilterOutputStream。
import java.io.IOException;
import java.io.PrintStream;
public class Test2 {
public static void main(String[] args) {
try( PrintStream printStream = new PrintStream("D:\\kaifamiao\\java\\zuoye\\day15test1.txt");){
printStream.println(1);
char[] chars = {'s','d','e','v'};
printStream.print(chars);
System.out.println(1);
System.setOut(printStream); //会把System.out.println(2);从控制台转换到文件中输出
System.out.println(2);
}catch (IOException e){
System.out.println(e.getMessage());
}
}
}
数据流:
DataOutputStream(数据输出流)
包装流,构造中可以传入(FileOutputStream)
write(byte[] b,int off,int len)
write(int b)
writeBoolean(true)
writeDouble()
writeByte()
DataInputStream(数据输入流)
包装流,构造中可以传入(FileInputStream),底层依赖InputStream
注:写顺序和读顺序必须一样否则会乱码
使用对象流读取对象信息
浅拷贝:创建一个新对象,将原始对象的值复制到新对象中,只复制对象属性值,若存在引用数据类型,拷贝引用值。引用数据类型1中包含引用数据类型2,会复制引用数据类型的属性值给新对象,但是引用数据类型2是地址。在重写方法中直接return super.clone();
注:clone()属于Object的方法,抛出CloneNotSupportedException要实现Cloneable接口,重写clone()。
**深拷贝:**创建一个新对象,并将原始对象的所有成员变量(包括引用类型)递归的复制到新对象中,默认情况下,clone()是浅拷贝,要是实现深拷贝,在对象的clone()方法中进行额外的处理,递归的复制引用类型的成员变量。引用数据类型1中包含引用数据类型2,复制引用数据类型1的属性,创建2的对象,并将2的属性赋值给2的对象,并返回。
注:如果不实现Cloneable接口,重写clone()会抛出异常.
序列化:
将对象的属性放入文本文件中
核心:保存对象状态,对象状态可存储
反序列化:从文本文件中获取对象信息
Serializable接口:
标记接口,表示一个类具有序列化能力
序列化实现:二进制,平台无关
ObjectOutputStream:包装字节流,实现AutoCloseable接口,可以传入OutputStream
void writeObject(Object o)
反序列化:
ObjectInputStream:包装流,实现AutoCloseable接口,可以传入InputStream
Object readObject()
写入文件在读出,引用数据类型== :false,equals():true, 序列化和反序列化是深刻隆
transient关键字:修饰成员变量,表示该字段不会参与序列化过程,用于排除敏感‘不必要字段
serialversionUID:用于版本控制,确保序列化与反序列化的兼容性,不写,可能会抛出InvalidClassException
若不显示指定seralvw=ersionUID,java会依据类结构自动生成
private static final long seralVersionUID = 1l;
若值没变化,修改字段值可以序列化or反序列化,若值改变,不可。
解析JSON:
应用场景:数据传输,配置文件
特点:
- 简洁
- 可读
- 跨语言
- 数据结构:数组,对象等
lombok注解:
@NoArgsConstructor和@AllArgsConstructor:生成无参构造函数和带参数构造函数
@Data:等价同时使用@Getter、@Setter、@ToString、@EqualsAndHashCode,生成所有这些方法。
fastjson:转换对象和JSON字符串
gson:谷歌的一个转换对象和JSON字符串的jar包
hutool-all:一个java工具包
jackson-annotaions、jackson-databind、jackson-core:jackson转换对象和JSON字符串
import java.io.Serializable;
import java.util.Objects;
public class Student1 implements Serializable {
private static final long seralVersionUID = 1l;
private String name;
private int age;
public Student1(){}
public Student1(String name, int age) {
this.name = name;
this.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;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student1 student)) return false;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Student1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
fastjson
import com.alibaba.fastjson2.JSON;
public class FastjsonTest {
public static void main(String[] args) {
Student1 s = new Student1("张三",25);
String jsonString = JSON.toJSONString(s);//将对象转换成字符串
System.out.println(jsonString);
Object parse = JSON.parse(jsonString); //将字符串转换成json对象,但是不能调用对象的属性
Student1 student = JSON.parseObject(jsonString, Student1.class); //传入json字符串形式的对象和运行时类型,转换成对象,可调用属性
student.getAge();
System.out.println(parse);
}
}
Hutool
import cn.hutool.json.JSONUtil;
public class HutoolTest {
public static void main(String[] args) {
Student1 student = new Student1("张三",2);
String jsonStr = JSONUtil.toJsonStr(student); //将对象转换成json字符串
System.out.println(jsonStr);
Student bean = JSONUtil.toBean(jsonStr, Student.class);
}
}
Gson
import com.google.gson.Gson;
public class GsonTest {
public static void main(String[] args) {
Gson gson = new Gson();
String student = """
{
"name" : "张三",
"age" : 5
}
""";
Student student1 = gson.fromJson(student, Student.class); //将json格式的字符串转换成对象
System.out.println(student1);
String json = gson.toJson(student1); //将对象转换成json字符串
System.out.println(json);
}
}