Conceptos básicos de JAVA-IO stream (3) -secuencia de secuencia y serialización, flujo de salida de memoria

Uno, flujo de secuencia

  1. ¿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í.
  2. 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:
Inserte la descripción de la imagen aquí

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:
Inserte la descripción de la imagen aquí

Tres, flujo de salida de memoria

  1. ¿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
  2. 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

  1. ¿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.
  2. 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:
Inserte la descripción de la imagen aquí

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:
Inserte la descripción de la imagen aquí
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.

Supongo que te gusta

Origin blog.csdn.net/Mr_GYF/article/details/108818136
Recomendado
Clasificación