关于ObjectOutputStream对象输出流与ObjectInputStream对象输入流:写入以及读出没有错误,但是写入的文件出现乱码的问题,该现象与UTF-8,GBK等字符集编码格式无关

 1:下面我们创建一个ObjectOutputStream输出流向文件中写入一首诗,再用ObjectInputStream往控制台输出

package day22;

import java.io.*;

public class ObjectStreamTest {
    public static void main(String[] args) {
        try(
                ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("file/e.txt"));
                ObjectInputStream ois =new ObjectInputStream(new FileInputStream("file/e.txt"));
                ){
            oos.writeObject("床前明月光");
            oos.writeObject("疑似地上霜");
            oos.writeObject("举头望明月");
            oos.writeObject("低头思故乡");
            oos.flush();
            while(true){
                try {
                    String str=(String)ois.readObject();
                    System.out.println(str);
                } catch (EOFException e) {
                    break;
                }

            }
            while(true){
                String str=null;
                try {
                    str= (String) ois.readObject();
                } catch (EOFException e) {
                    System.out.println("运行完了,没有了");
                    break;
                }
                System.out.println(str);

            }
         /*   System.out.println(ois.readObject());
            System.out.println(ois.readObject());
            System.out.println(ois.readObject());
            System.out.println(ois.readObject());*/
        }catch (FileNotFoundException e){
            System.out.println("文件路径有误");
        }catch (IOException e){
            System.out.println("读写有误");
        }catch (Exception e){
            System.out.println("未知错误");
        }
    }
}

2:发现写入与读出的结果一致,但是打开写入的.txt文本发现文本出现乱码,并且idea编译器会报错提示字符编码集错误

 (1)代码写入关于ObjectOutputStream对象输出流与ObjectInputStream对象输入流:写入以及读出没有错误,但是写入的文件出现乱码的问题,该现象与UTF-8,GBK等字符集编码格式无关_第1张图片

 (2)控制台输出与代码写入一致

关于ObjectOutputStream对象输出流与ObjectInputStream对象输入流:写入以及读出没有错误,但是写入的文件出现乱码的问题,该现象与UTF-8,GBK等字符集编码格式无关_第2张图片

(3)打开ObjectOutputStream流写入的文本发现乱码

关于ObjectOutputStream对象输出流与ObjectInputStream对象输入流:写入以及读出没有错误,但是写入的文件出现乱码的问题,该现象与UTF-8,GBK等字符集编码格式无关_第3张图片

当时是为了测试桥转换流而改了字符编码集为GBK,改回UTF-8后其它的字节流字符流写入格式都正常,只有对象流写入的文件会出现乱码的问题,上网搜了很多小可爱写的没用的乐色,发现根本搜不到,最后请来了大师才发现:

对象流写入文件本身就是乱码的,对象流中有一个机制是魔数机制,魔数机制,可以把写进去的字符加密,但是idea会识别到编码错误,其实是正确的加密而已

你可能感兴趣的:(java,java,算法,开发语言)