Además de los archivos binarios y los archivos de texto, Java también tiene operaciones de datos basadas en Datos, aquí se refiere a los tipos de datos básicos de Java y Cadena. Los tipos de datos básicos incluyen byte, int, char, long, float, double, boolean y short.
Las dos clases de las que hay que hablar cuando se habla de los tipos de datos básicos de Java son DataInputStream y DataOutputStream. Proporcionan operaciones sobre los tipos de datos básicos de Java, pero estos métodos en realidad se definen en dos interfaces importantes, DataInput y DataOutput. Su función es convertir flujos de bytes binarios en tipos de datos básicos de Java, al mismo tiempo que proporciona funcionalidad para construir una cadena a partir de datos usando UTF. -8 codificación. Existe una clase importante RandomAccessFile que implementa dos interfaces, DataInput y DataOutput, para que pueda escribir y leer archivos al mismo tiempo.
Los métodos de las clases DataInputStream y DataOutputStream son muy simples. Las estructuras básicas son readXXXX() y writeXXXX(), donde XXXX representa el tipo de datos básico o String. No entraré en detalles aquí, pero vale la pena mencionar que necesitamos leer las reglas de codificación Unicode en Java, que se presentan con más detalle en el documento API. Por lo general, muchos de nuestros objetos se componen de tipos de datos básicos de Java. Por ejemplo, la información de una persona incluye nombre, dirección de correo electrónico, número de teléfono y sexo. De hecho, podemos usar los métodos en DataInputStream y DataOutputStream para escribir datos en la secuencia en una secuencia determinada y luego leerlos en la misma secuencia. Esta es nuestra propia serialización, que se puede usar en la transmisión de datos. el mecanismo de serialización para transmitir datos en programas de red J2ME. Veamos cómo implementar la serialización nosotros mismos. Primero, necesitamos tener dos constructores con un parámetro vacío.
Cuenta pública()
{
}
Cuenta pública(Nombre de usuario de cadena, correo electrónico de cadena, edad int, género booleano)
{
this.userName = nombre de usuario
this.email = correo electrónico
this.age = edad
;this.gender = Gender;
}
Cuando serializamos, también es muy simple: simplemente escribimos las variables miembro del objeto en orden en DataOutputStream. Por ejemplo:
public void serialize(DataOutputStream dos) lanza IOException
{
dos.writeUTF(userName
dos); writeUTF (correo electrónico);
dos.writeInt(age);
dos.writeBoolean(gender);
}
Cuando proceder Durante la deserialización, los datos se leen de DataInputStream en el mismo orden y se asignan a variables miembro.
Por ejemplo:
Cuenta pública estática deserialize(DataInputStream dis) lanza IOException
{
Cuenta de cuenta = nueva cuenta()
; cuenta .userName = dis.readUTF();
cuenta.email = dis.readUTF()
cuenta.age = dis.readInt(); > account.gender = dis.readBoolean();
return account;
}
Para facilitar la depuración, también proporcionamos un método toString(). para imprimir la información real del objeto. Ésta es una buena práctica.
public String toString()
{
return "UserName = " userName " Email = " email " edad = " edad " género = " (¿género? "male" : "female");
}
Para probar la serialización, escribimos el siguiente programa para probar.
paquete com.j2medev.mingjava
importar java.io.*
clase pública TestDataIO
{
public static void main(String[] args) lanza IOException
{
Cuenta cuenta = nueva Cuenta("mingjava","eric.zhan@263.net", 25, verdadero);
System.out.println("antes de la serialización...");
System.out.println(account.toString());
ByteArrayOutputStream baos = nuevo ByteArrayOutputStream();
DataOutputStream dos = nuevo DataOutputStream(baos);
account.serialize(dos); p> p>
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(baos.toByteArray()));
Cuenta sAccount = Account.deserialize(dis);
System. out.println("después de la serialización...");
System.out.println(sAccount.toString());
dos.close()
p>
dis.close();
}
}
paquete com.j2medev.mingjava
importar java; .io.*;
Cuenta de clase pública
{
Cadena privada nombre de usuario = ""
Cadena privada correo electrónico = "" ;
edad int privada = 0;
género booleano privado = falso
Cuenta pública()
{}
Cuenta pública(String nombre de usuario, String email, int edad, género booleano)
{
this.userName = userName
this.email; = correo electrónico;
this.age = edad;
this.gender = género;
}
serialización pública vacía (DataOutputStream dos ) lanza IOException
{
dos.w
riteUTF(nombre de usuario);
dos.writeUTF(correo electrónico);
dos.writeInt(edad);
dos.writeBoolean(género); >
}
La deserialización de la cuenta estática pública (DataInputStream dis) arroja IOException
{
Cuenta de cuenta = nueva cuenta()
<; p>cuenta.nombredeusuario = dis.readUTF();cuenta.email = dis.readUTF();
cuenta.age = dis.readInt();
cuenta.gender = dis.readBoolean();
devolver cuenta
}
cadena pública toString()
{
return "UserName = " userName " Email = " email " edad = " edad " género = " (¿género? "masculino" : "femenino"
} p>
}
p>
}
Compile y ejecute el programa y envíelo a la consola:
antes de la serialización...
Nombre de usuario = mingjava Correo electrónico = eric.zhan@263.net edad = 25 género = hombre
después de la serialización.....
Nombre de usuario = mingjava Correo electrónico = eric.zhan@263 .net edad = 25 género = hombre