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