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

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

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下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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