JAVA简明摘要(十四)保存对象(序列化和文件的输入/输出)

1 储存对象

如果只有自己写的Java程序会用到这些数据:
1.用序列化
将被序列化的对象写到文件中。

如果数据需要被其他程序引用:
2.写一个纯文本文件,用其他程序可以解析的特殊字符写到文件中。

2 序列化

FileOutputStream fileStream = new FileOutputStream("Mygame.ser");
ObjectOutputStream os = new ObjectOutputStream(fileStream);
os.writeObject(chracterOne);
os.writeObject(chracterTwo);
os.writeObject(chracterThree);
os.close();

3 串流

一般来说,串流要两两连接才有意义。其中一个表示连接,另一个调用方法,因为表示连接的串流通常都是很底层的。

4 Serializable

Serializable接口又被称为market或tag类的标记用接口,因为此接口并没有任何方法需要实现。它的唯一目的就是声明实现它的类是可以被序列化的。
静态变量不会被序列化。

import java.io.*;

public class Box implements Serializable {
}

如果某实例变量不能或不应该被序列化,就把它标记为transient(瞬时)的。

import java.io.*;

public class Box implements Serializable {
  transient String CurrentID;
}

5 解序列化(Deserialization)

FileOutputStream fileStream = new FileOutputStream("Mygame.ser");
ObjectOutputStream os = new ObjectOutputStream(fileStream);
Object one = os.readObject();
GameCharacter elf = (GameCharacter) one;//转换类型
os.close();//FileInputStream会自动关掉

6 字符串写入文本文件

FileWriter writer = new FileWriter("Foo.txt");
writer.write("Foo!");
writer.close();

7 File

File这个类代表磁盘上的文件,但并不是文件中的内容,类似于文件路径。
File本身没有读写文件的方法。
但它提供了比字符串文件名更安全的方式。

File dir = new File("Chapter7");
dir.mkdir();
dir.delete();

8 缓冲区

缓冲区比没有缓冲区的效率更好,磁盘操作比内存操作更耗费时间。
也可以直接调用FileWrite的write来写文件。

BufferedWriter writer = new BufferedWriter(new FileWriter(aFile));

9 读取文本文件

以FileReader来执行实际的读取,并用BufferedReader来让读取更有效率。

import java.io.*;
class ReadFile {
    public void static main (String[] args) {
        try {
            File myFile = new File("MyText.txt");
            FileReader fileReader = new FileReader(myFile);
            BufferedReader reader = new BufferedReader(fileReader);

            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

10 split()

String[] result = toTest.split("/");

11 serialVersionUID

每当对象被序列化的同时,该对象都会被盖上一个类的版本识别ID,这个ID被称为serialVersionUID。
如果类被改变了,则UID会变化,则还原操作会失败。
解决方案是把serialVersionUID放在class中,让类在演化的过程中维持着相同的ID。
可以使用JDK里自带的serialver工具来查询类ID。

% serialver Dog
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值