Serialização / desserialização
Visão geral: serializar (a serialização) é convertido em informações de estado do objecto pode ser armazenado ou transmitido sob a forma de processo.
- Durante a serialização, o estado atual do objeto a ser escrito para uma área de armazenamento temporário ou permanente. Mais tarde, lendo ou desserializar um objeto a partir de uma área de armazenamento em um estado, re-criar o objeto.
Serialização: usando o ObjectOutputStream, informações de objecto, o formato de transferência para um valor fixo de saída e uma série de bytes para o disco de persistiu.
- Deserialization: uso ObjectInputStream, ler os dados serializados no disco, restaurar objetos.
Features / Cenário:
- Precisa serializar o arquivo deve implementar a interface Serializable para permitir a sua função de serialização.
- Os dados serializados podem não precisa ser modificado para ser estático, já que a estática pertencem à classe, não com os objetos de saída serializados.
- Não requer os dados serializados também pode ser modificado para temporária transitória, durante a execução do programa, existe na memória não serão persistentes serializado.
- Quando deserializing, e se a versão serializada é inconsistente, incapaz de completar a desserialização.
- Cada arquivo serializado tem uma identificação única, se compilador não acrescentou gera um número de versão é calculado de acordo com as informações de definição de classe.
- É usado para transferir dados entre servidores, arquivo serializado, ler dados desserializados.
- Típico para fluxo de tomada de passar objetos entre hosts.
ObjectOutputStream
ObjectOutputStream
- Objetos Java tipos primitivos de dados e gráficos escrever OutputStream. ObjectInputStream pode ler o objeto (reconstruída). armazenamento persistente pode ser conseguido através de um objeto de arquivo em um córrego.
> -- ObjectOutputStream(OutputStream out)
创建写入指定 OutputStream 的 ObjectOutputStream。
> -- void writeObject(Object obj)
将指定的对象写入 ObjectOutputStream。
ObjectInputStream
ObjectInputStream
- Dados básicos e objetos previamente escrito usando um ObjectOutputStream desserializado.
> -- ObjectInputStream(InputStream in)
创建从指定 InputStream 读取的 ObjectInputStream。
> -- Object readObject()
从 ObjectInputStream 读取对象,读取序列化数据。
A informação do estudante serializado para o disco [serialização]
public class Seri {
public static void main(String[] args) throws Exception, IOException {
//序列化:就是把java对象保存在磁盘中
ObjectOutputStream os =
new ObjectOutputStream(
new FileOutputStream( "D:\\teach\\a\\student.txt"));
Student s = new Student("张三",20,"成都");
os.writeObject(s);
os.close();//关闭输出资源
//反序列化:从磁盘读到程序里
ObjectInputStream in =
new ObjectInputStream(
new FileInputStream(
"D:\\teach\\a\\student.txt"));
//读到的对象,默认是Object,需要强转成子类
Student s2 = (Student)in.readObject();
System.out.println(s2);
}
}
//1,如果想完成序列化,类必须实现Serializable接口
//只是用来做标记,需要序列化
class Student implements Serializable{
//创建对象用
public Student(String name, int age, String addr) {
this.name = name;
this.age = age;
this.addr = addr;
}
//一般序列化的都是属性
String name = "张三";
int age = 20;
String addr = "成都";
//为了看属性值
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", addr=" + addr + "]";
}
}