Splitter
Un Splitter es un componente enchufable cuyo propósito es tomar un flujo de datos (típicamente un archivo grande) y publicar un flujo de events conteniendo partes más pequeñas (componentes).
Para definir cómo dividir los datos, una estructura de datos en forma de árbol (component hierarchy) se pasa como una entrada.
Se espera que las implementaciones concretas conozcan el formato de los datos transmitidos, es decir,XML, JSON, CSV, etc. Esto es necesario, ya que el método de separación de los componentes depende de la forma en que se estructura los datos.
Desde el Debulker permite múltiples divisores, se espera que el Splitter devuelva un nombre que se identifique de manera única.
Interfaz
La interfaz Splitter se define de la siguiente manera.
public interface Splitter {
String getName(); (1)
Flux<DebulkComponent> split(InputStream stream, ComponentHierarchy hierarchy); (2)
}
| 1 | get Name se utiliza para identificar de manera única la implementación. |
| 2 | split toma un Input Stream y un Component Hierarchy y devuelve un Publisher que emite Components. |
Eficiencia de Memoria
Splitter Las implementaciones son responsables de limitar la cantidad de memoria consumida durante el procesamiento. Por lo tanto, se recomienda encarecidamente *no* intentar transmitir todos los datos a la memoria antes de analizarlos y dividirlos en componentes constitutivos. En su lugar, solo se debe mantener en memoria la cantidad de datos necesaria en un momento dado, proporcionando una eficiencia óptima de memoria.
Se recomienda que las implementaciones también proporcionen mecanismos para limitar la cantidad máxima de memoria que se puede asignar.splitter puede consumir.