Foros del Web » Programación para mayores de 30 ;) » Java »

Comprimir datos al vuelo para enviarlos por un socket

Estas en el tema de Comprimir datos al vuelo para enviarlos por un socket en el foro de Java en Foros del Web. Hola a todos: Estoy con un programita y necesito enviar BufferedImages(Son capturas de pantalla) por un socket, hasta ahí todo bien, está hecho y funciona ...
  #1 (permalink)  
Antiguo 01/08/2012, 11:16
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 6
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Comprimir datos al vuelo para enviarlos por un socket

Hola a todos:

Estoy con un programita y necesito enviar BufferedImages(Son capturas de pantalla) por un socket, hasta ahí todo bien, está hecho y funciona (BufferedImage no es serializable por lo tanto lo que envío realmente es un ImageIcon que si implementa la interfaz).
El problema es que una BufferedImage(o imageIcon) no es más que un BMP que ocupa demasiado en memoria, y por lo tanto, tarda demasiado en enviarse por la red. Mi problema actual es ese. Necesito transformar una BufferedImage a un array de ints (esto es sencillo, crear un array de int[ancho * alto] y meterle los pixels) para luego conseguir aplicar la función de compresión, pero es ahí donde no consigo que la cosa marche, conseguir plantar el DeflaterOutputStream en mi ObjectOutputStream y mandarlo no me funciona...

Me sirve o bien comprimir el array en memoria y luego meterlo por el objectoutputstream o comprimirlo al vuelo directamente con el deflater, me da exactamente igual porque mi problema actual es de red, no de tiempo de procesamiento.

Digamos que tengo las siguientes variables:

BufferedImage imagen;
ObjectOutputStream salida;

A ver quién se inventa algo para que entre la imagen por el socket :D

Gracias!

No se si me he explicado
  #2 (permalink)  
Antiguo 01/08/2012, 13:18
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses
Puntos: 454
Respuesta: Comprimir datos al vuelo para enviarlos por un socket

bueno, no he probado, pero se me ocurre lo siguiente .... para envio puedes hacer esto

new ObjectOutputStream(new DeflaterOutputStream(socket.getOutputStream());

y en el lado que lees

new ObjectInputStream(new DeflaterInputStream(socket.getInputStream());

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 01/08/2012, 21:45
 
Fecha de Ingreso: agosto-2012
Mensajes: 6
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Comprimir datos al vuelo para enviarlos por un socket

Hola, haber si te ayuda esto:

[URL="http://javatechniques.com/blog/compressing-data-sent-over-a-socket/"]http://javatechniques.com/blog/compressing-data-sent-over-a-socket/[/URL]

Hasta donde entiendo, comprime y envía bloques de paquetes vía socket, por lo que desde el punto de vista de arquitectura de red creo que debería ser óptimo, claro, hay que probarlo bien...

Espero haber ayudado...

Saludos,
Juanjo
  #4 (permalink)  
Antiguo 06/08/2012, 10:41
 
Fecha de Ingreso: agosto-2012
Ubicación: España
Mensajes: 6
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Comprimir datos al vuelo para enviarlos por un socket

Gracias a ambos, las dos opciones las había probado y sin suerte, no funciona ninguna, la primera no da ningún error, simplemente se queda bloqueado en la creación de los streams, la segunda no funciona tp... finalmente voy a tirarme por esta opción:
http://java-remote-control.googlecode.com/svn/trunk/src/main/java/com/wet/wired/jrc/frame/compression/RunLengthThenGZCompressor.java

Gracias a todos!

Etiquetas: compresion, socket
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:59.