Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

232
Vistas
¿Hay alguna manera de leer un InputStream de forma asíncrona con Reactor o transformarlo en bytes?

Estoy tratando de cargar un archivo en S3, pero JVM dice que tengo un método de bloqueo de subprocesos llamados en fragmentos de código donde los subprocesos no deben bloquearse al llamar a file.readAllBytes(), entonces, ¿hay alguna manera de hacerlo? hacer el método asíncrono con Flux o Mono? o alguna otra forma de solucionar ese problema?

 private Mono<Boolean> uploadFile(InputStream file, String bucket, String name) { try { return uploadAdapter.uploadObject(bucket,name,file.readAllBytes()); } catch (IOException e) { return Mono.just(false); } } @Override public Mono<Boolean> uploadObject(String bucketName, String objectKey, byte[] fileContent) { return Mono.fromFuture( s3AsyncClient.putObject(configurePutObject(bucketName, objectKey), AsyncRequestBody.fromBytes(fileContent))) .map(response -> response.sdkHttpResponse().isSuccessful()); }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Dado que InputStream es una API síncrona, tiene 2 opciones, y eso es cierto para cualquier otra API síncrona:

  1. Para cambiar a otra API. No es broma, esta puede ser una buena y posible solución para muchos problemas. Los conceptos reactivos y asíncronos en general son muy comunes y para la mayoría de las necesidades, existe una biblioteca asíncrona alternativa que hará lo mismo. En tu caso, puedes usar java.nio2 , o funciones de la biblioteca Reactor-Netty, que tiene excelentes soluciones para este caso de uso .
  2. Utilice otro planificador. Project reactor sugiere que todas sus llamadas asíncronas operarán en un programador sin bloqueo, y para las llamadas síncronas, use otro programador (de bloqueo) de subproceso por solicitud. Hay dos programadores como este que puede usar: single() boundedElastic() . La diferencia es boundedElastic() limita la cantidad de subprocesos que puede abrir, por lo que terminará usando sus subprocesos como colas de bloqueo, lo cual es más seguro que single() .
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda