出现原因
机器只能识别二进制码,将字符编译为字节码需要使用字符集依据;
常见的字符集:gbk(英文、中文,windows默认–存储txt文件时注意转为utf—8,idea使用字符集为utf-8),utf-8(英文、中文、其他国家的符号)
所有字符集中都包含英文字符,且英文字符对应的编码都相同;所以英文不会乱码;
在读取文件时,文件的编码格式与java编译编码使用字符集不一致,输出的中文乱码;
解析时使用的字符集不含汉字编码
gbk中一个汉字占2个字节,utf-8中一个汉字占3个字节
并且对应的汉字编码不同,所以乱码
解决
使用一致的字符集
Person类:
package com.序列化; import java.io.Serializable; public class Person implements Serializable { int age; String name; String address; int salary; char sex; public void eat() { System.out.println("干饭人,干饭魂"); } }
Test类:
package com.序列化; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class Test { public static void main(String[] args) { Person person = new Person(); try { ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("person.txt")); objectOutputStream.writeObject(person); objectOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
效果:
还是出现了乱码,我的所有编码都是以GBK实现,但还是乱码了。