初学Java,以串行化的方式写入对象到.txt文件,.txt文件是以二进制的方式写入的,打开就会是乱码,在程序中,怎么转换才不是乱码呢?又怎么读取???

1、写入源代码:

package cn.weenit.test2;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Demo01ObjectOutputStream {
    public static void main(String[] args) throws IOException {
        //1.创建ObjectOutputStream对象,构造方法中传递字节输出流
        //OutputStreamWriter osw=new OutputStreamWriter(

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("homework4/src/cn/weenit/TestFile/dest.txt"));
        //2.使用ObjectOutputStream对象中的方法writeObject,把对象写入到文件中
        oos.writeObject(new Student("20150003","王五",68,93,97,258));
        //3.释放资源
        oos.close();
    }
}

2、写入的.txt文件,怎么让这个文件不是乱码?

图片说明

3、读取代码

package cn.weenit.test2;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class Demo02ObjectInputStream {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //1.创建ObjectInputStream对象,构造方法中传递字节输入流
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("homework4/src/cn/weenit/TestFile/source.txt"));
        //2.使用ObjectInputStream对象中的方法readObject读取保存对象的文件
        //Object o = ois.readObject();
        Object o = ois.readUTF();
        //3.释放资源
        ois.close();
        //4.使用读取出来的对象(打印)
        System.out.println(o);
        Student p = (Student)o;
        System.out.println(p.getNo()+p.getName()+p.getEnglish()+p.getChinese()+p.getMach()+p.getAlGrade());
    }
}

4、读取代码执行结果,怎么在源代码的基础修改能够读取?我觉得也是一种转换吧!

图片说明

IDEA编译时使用的大概是UTF-8
然而windows系统文件用的编码是GBK
这可能导致了乱码的产生

把FileInputStream接上InputStreamReader,
把FileOutputStream接上OutputStreamWriter试试看

图片说明

也可以在字符串转byte的时候动手

图片说明