Uno, flujo de secuencia
- ¿Qué es un flujo de secuencia? Un
flujo de secuencia puede integrar múltiples flujos de entrada de bytes en uno. Al leer datos de un flujo de secuencia, comenzará a leer desde el primer flujo que se integrará y continuará leyendo el segundo después de leer uno. Y así. - Cómo usar
Integrar dos: SequenceInputStream (InputStream, InputStream)
Caso: antes de usar el flujo de secuencia
FileInputStream fileInputStream1 =new FileInputStream("a.txt");
//创建字节输入流关联a.txt
FileOutputStream fileOutputStream =new FileOutputStream("c.txt");
//创建字节输出流关联c.txt
int b1;
while ((b1=fileInputStream1.read())!=-1) {
fileOutputStream.write(b1);
}
fileInputStream1.close();
int b2;
FileInputStream fileInputStream2 =new FileInputStream("b.txt");
while ((b2=fileInputStream2.read())!=-1) {
fileOutputStream.write(b2);
}
fileInputStream2.close();
fileOutputStream.close();
Con SquenceInputStream, se pueden integrar dos flujos en un flujo
FileInputStream fis1 =new FileInputStream("a.txt");
FileInputStream fis2 =new FileInputStream("b.txt");
SequenceInputStream sis =new SequenceInputStream(fis1,fis2);
FileOutputStream fos =new FileOutputStream("c.txt");
int b;
while ((b=sis.read())!=-1) {
fos.write(b);
}
sis.close();
fos.close();
El efecto es el siguiente:
Dos, el flujo de secuencia integra múltiples
Escenarios de aplicación, podemos hacer pinchos de una canción. Integra las canciones que te gustan en una sola canción.
FileInputStream fis1=new FileInputStream("a.txt");
FileInputStream fis3=new FileInputStream("c.txt");
Vector<FileInputStream> vector =new Vector<FileInputStream>();
vector.add(fis1);
vector.add(fis2);
vector.add(fis3);
Enumeration<FileInputStream> en =vector.elements();
SequenceInputStream sis =new SequenceInputStream(en);
FileOutputStream fos =new FileOutputStream("d.txt");
int b;
while ((b=sis.read())!=-1) {
fos.write(b);
}
sis.close();
fos.close();
El efecto es el siguiente:
Tres, flujo de salida de memoria
- ¿Qué es un flujo de salida de memoria?
Este flujo de salida puede escribir datos en la memoria, usando la memoria como un búfer, y después de escribir, puede obtener todos los datos a la vez - Cómo usar
Crear objeto: new ByteArrayOutputStream ()
Escribir datos: escribir (int), escribir (byte [])
Obtener datos: toByteArray ()
FileInputStream fileInputStream =new FileInputStream("e.txt");
//在内存中创建了可以增长的内存数组
ByteArrayOutputStream baos =new ByteArrayOutputStream();
int b;
while ((b=fileInputStream.read())!=-1) {
baos.write(b);
}
//将缓冲区的庶几乎全部获取出来,并赋值给arr数组
byte []arr=baos.toByteArray();
System.out.println(new String(arr));
//上面两句可以直接转换直接用下面的语句进行赋值
System.out.println(baos.toString());
//将缓冲区的内容转换为字符串,可以省略调用toString方法
fileInputStream.close();
Notabyte [] arr = baos.toByteArray ();
System.out.println (nueva cadena (arr));
Se puede reemplazar con == System.out.println (baos.toString ()); ==
Esta función puede llamar registros de chat, usar archivos de base de datos para llamar datos locales y almacenarlos en el contenido y llamarlos todos a la vez.
Cuarto, el flujo de operaciones del objeto ObjecOutputStream-serialization
- ¿Qué es un flujo de operaciones de objetos?
El flujo puede escribir un objeto o leer un objeto en el programa, es decir, se realizan la serialización y deserialización. De manera similar a como jugamos un juego, almacenamos el nivel y el equipamiento de los personajes del juego en la base de datos o servidor en forma de objetos. - Cómo usarlo
:new ObjectOutputStream(OutputStream), writeObject()
Caso:
Paso 1:
Cree una nueva clase de dominio. Tenga en cuenta que si desea lograr la serializaciónDebe hacer referencia a la interfaz serializable
public class Person implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
Paso 2: lee los datos
Person p1=new Person("张三",12);
Person p2=new Person("李四",13);
ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("e.txt"));
oos.writeObject(p1);
oos.writeObject(p2);
oos.close();
El efecto es el siguiente:
Cinco, flujo de operaciones de objetos ObjectInputStream-deserialización
Leer: new ObjectInputStream(InputStream), readObject()
public static void main(String[] args) throws IOException, ClassNotFoundException{
ObjectInputStream ois =new ObjectInputStream(new FileInputStream("e.txt"));
Person p1=(Person)ois.readObject();
Person p2=(Person)ois.readObject();
System.out.println(p1);
System.out.println(p2);
ois.close();
}
El efecto es el siguiente:
si se escribe un objeto más, se informará de un error.
Seis, optimización del flujo de operaciones del objeto.
Almacene el objeto en la colección y escríbalo, luego escriba la colección solo una vez, y solo lea una colección en la última lectura, y luego recorra la colección
Escribe primero
Person p1=new Person("张三",12);
Person p2=new Person("李四",13);
Person p3=new Person("王五",14);
Person p4=new Person("赵六",15);
List<Person> list =new ArrayList<Person>();
list.add(p1);
list.add(p1);
list.add(p3);
list.add(p4);
ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("e.txt"));
oos.writeObject(list);
oos.close();
Leer operación
ObjectInputStream ois =new ObjectInputStream(new FileInputStream("e.txt"));
ArrayList<Person>list=(ArrayList<Person>)ois.readObject();
for (Person person : list) {
System.out.println(person);
}
ois.close();
Realice y escriba las dos operaciones anteriores.