老师,运行程序后,imooc.txt文件内容是乱码

老师,运行程序后,imooc.txt文件内容是乱码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.imooc.serial;
 
import java.io.Serializable;
 
public class Goods implements Serializable{
    private String goodsId;
    private String goodsName;
    private double price;
     
    public Goods(String goodsId, String goodsName, double price) {
        super();
        this.goodsId = goodsId;
        this.goodsName = goodsName;
        this.price = price;
    }
 
    public String getGoodsId() {
        return goodsId;
    }
 
    public void setGoodsId(String goodsId) {
        this.goodsId = goodsId;
    }
 
    public String getGoodsName() {
        return goodsName;
    }
 
    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }
 
    public double getPrice() {
        return price;
    }
 
    public void setPrice(double price) {
        this.price = price;
    }
 
    @Override
    public String toString() {
        return "商品信息[编号:" + goodsId + ", 名称:" + goodsName + ", 价格:" + price + "]";
    }  
}
 
 
 
 
 
 
 
package com.imooc.serial;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
public class GoodsTest {
 
    public static void main(String[] args) {
        //定义Goods类对象
        Goods goods1=new Goods("gd001","电脑",3000);
        try {
            FileOutputStream fos=new FileOutputStream("imooc.txt");
            ObjectOutputStream oos=new ObjectOutputStream(fos);
            FileInputStream fis=new FileInputStream("imooc.txt");
            ObjectInputStream ois=new ObjectInputStream(fis);
            //将对象Goods信息写入文件
            oos.writeObject(goods1);
            oos.writeBoolean(true);
            oos.flush();
            //读对象信息
            try {
                Goods goods=(Goods)ois.readObject();
                System.out.println(goods);
            catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(ois.readBoolean());
            fos.close();
            oos.close();
            fis.close();
            ois.close();
        catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        catch(IOException e){
            e.printStackTrace();
        }
    }
}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,1. 反序列化是从字节流创建对象的相反的过程。对象反序列化的步骤如下:

    1.1、 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;

    1.2、 通过对象输入流的readObject()方法读取对象。

在视频中也有涉及到哦~ 如图所示:

http://img1.sycdn.imooc.com//climg/5df04c6e09dcbbb109650577.jpg

2. 是的,对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中。imooc.txt文件中的内容是序列化后的内容,所以看起来是乱码,而在控制台输出反序列化的数据。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小尤 2019-12-10 09:45:34

同学你好,这里是存入的对象是序列化后的内容,所以存入的内容是序列化格式,并没有错哦~ 老师案例中文件。如图所示:

http://img1.sycdn.imooc.com//climg/5deef7f309aaa15810650129.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕粉1465475474 #1
    怎样反序列化呢?要得到视频中一样的结果,可以吗?
    2019-12-10 21:41:58
  • 提问者 慕粉1465475474 #2
    目前课程讲的内容,只能在控制台输出反序列化的数据,而在imooc.txt中暂时只能显示乱码,对吗?
    2019-12-10 21:56:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码