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 eventos que contengan fragmentos más pequeños (componentes).
Para definir cómo dividir los datos, se pasa como entrada una estructura de datos en forma de árbol (jerarquía de componentes).
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 lo 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 Component Hierarchy y devuelve un Publisher que emite Components. |
Eficiencia de Memoria
SplitterLas 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 un divisor determinado puede consumir.