Documentation for a newer release is available. View Latest

Splitter

Un Splitter es un componente acoplable cuyo propósito es tomar un flujo de datos (normalmente un archivo grande) y publicar un flujo de eventos que contienen partes más pequeñas (componentes).

Para definir cómo dividir los datos, se pasa como entrada una estructura de datos en forma de árbol (component hierarchy).

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 división de los componentes depende de la forma en que estén estructurados los datos.

Dado que el Debulker permite múltiples splitters, se espera que el Splitter devuelva un nombre que lo identifique de manera única.

Interface

La interfaz de Splitter se define de la siguiente manera.

public interface Splitter {
    String getName(); (1)

    Flux<DebulkComponent> split(InputStream stream, ComponentHierarchy hierarchy); (2)
}
1 getName se usa para identificar de forma única la implementación.
2 split recibe un InputStream y ComponentHierarchy y devuelve un Publisher que emite Components.

Eficiencia de memoria

Las implementaciones de Splitter 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 memoria antes de analizarlos y dividirlos en componentes. En su lugar, solo se debe mantener en memoria la cantidad de datos necesaria en cada momento, proporcionando la máxima eficiencia de memoria.

También se recomienda que las implementaciones proporcionen mecanismos para limitar la cantidad máxima de memoria que un splitter puede consumir.

Implementations

Como con otras bibliotecas de IPF, ya se proporcionan implementaciones predeterminadas para los casos de uso más comunes. Los enlaces a la documentación de cada implementación se enumeran a continuación: