文件I/O

来源:互联网 发布:mac怎么下载2个qq 编辑:程序博客网 时间:2024/06/06 01:36
存储的两种状态
    序列化
    纯文本文件
如果只有自己的Java程序用数据:序列化
可能被其他程序引用:纯文本文件
接口 Serializable来自 java.io.*;


创建FileOutputStream  :这是连接文件的,较底层
    FileOutputStreamfileStream = new FileOutputStream("MyGame.ser");

创建ObjectOutputStream ;把对象层次转换串流级别记入FileOutputStream。
    ObjectOutputStreamos =new ObjectOutputStream(fileStream);

调用方法写入对象
    os.writeObject(characterOne);//也就是把变量引用的对象序列化并写入MyGamer.set文件
    os.writeObject(characterTwo);
    os.writeObject(characterThree);

关闭ObjectOutputStream
    os.close();//关闭关联的输出串流-----------------------------



应该注意到,串流要两两连接才能有意义(FileOutputStream和ObjectOutputStream),这其中一个表示连接,另一个调用方法。至于为什么是两个?连接的串流一般是很低层的。FileOutputStream有写入字节的方法。但我们一般不会直接写字节,而是以对象层次的观点来操作,所以需要高层连接串流ObjectOutputStream与FileOutputStream连接。
FileOutputStream把字节写入文件。ObjectOutputStream把对象转换成可以写入串流的数据。调用writeObject时对象会被打成串流送入FileOutputStream来写入文件。
另外值得注意的是以上语句可能会抛出异常所以应该放置在try{}里
同一个类的不同对象的区别的关键在于其实例变量的不同(那么当然你需要保存实例变量)。所以在对象被序列化时,被该对象引用的实例变量也会序列化,且引用的对象也会序列化,这些是自动进行的。
上述也提到一个问题是其引用的对象会一同序列化,是所以引用到的。
类可以被序列化需要实现接口 Serializable
这时也要注意到你需要在所有可能用到的类中实现参考上言。序列化的类要实现接口,其中引用到了其他对象那么也要实现。

如果实例变量不能或者不应序列化标记为 teansient(瞬时)这样会跳过它进行序列化


解序列化(Deserializtion):还原对象


创建FileInputStream连接文件
    FileInputStreamfileStream = new FileInputStream("MyGame.ser");

创建ObjectInputStream
用来读取对象,但是需要链接FileInputStream提供文件存取
    ObjectInputStream os =new ObjectInputStream(fileStream);

读取对象
    Object one = os.readObject();
    Object two = os.readObject();
    Object three = os.readObject();

转换对象类型(默认Object)
    GameCharacterelf = (GameCharacter) one;
    GameCharactertroll = (GameCharacter) one;
    GameCharactermagician = (GameCharacter) one;
关闭ObjectInputStream
    os.close();

解序列化时,
对象从stream中读出来,虚拟机会判断其class类型;
Jvm寻找其类并加载,如果找不到会抛出异常;
新对象被配置在堆上,但注意新对象的构造方法不会执行,因为构造方法会将对象恢复全新,我们想要的是对象的状态是此前储存的;
如果对象的继承树上某个祖先类不可序列化,则它在构造时的构造函数会执行,显然构造函数的递归性会连锁讲其以上的父类全部初始化;
被transient修饰的变量会被赋予默认值。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 星巴克券过期了怎么办 京东买面膜发个空包怎么办 手机低于4.4版本怎么办才能恢复 263云通信密码忘了怎么办 有信电话拉黑了怎么办 微信手机充值冲错了怎么办 国通石油卡怎么办红卡 善融商城有假货怎么办 中百购物卡丢了怎么办 cncbk被骗25万该怎么办 中银e贷额度冻结怎么办 招行抵押贷循环额度怎么办 小额钱袋被拒了怎么办 银行需要提供消费贷款发票怎么办 中银e贷款逾期怎么办 按揭房不想要了怎么办 房贷不想还了怎么办 融e借没有u盾怎么办 窗式空调声音大怎么办 瑞得卡过期了怎么办 对公账号转错了怎么办 中银e令丢了怎么办 中银e贷到期了怎么办 招行信用卡附属卡怎么办 华普超市购物卡怎么办 公司发超市购物卡怎么办 物美购物卡丢了怎么办 淘宝买肯德基电子券留错号码怎么办 京东e卡过期了怎么办 京东e卡绑定错了怎么办 手机换号京东账号绑的银行卡怎么办 京东金条激活失败怎么办 京东买的k3不能激活怎么办 优购手机光黑屏怎么办 优购手机忘记手势密码怎么办 消费卡过期了钱怎么办 超市卡过期了钱怎么办 宜家购物卡的钱怎么办 武商购物卡过期怎么办 丹尼斯卡过期了怎么办 联华ok卡过期了怎么办