Io :: mark

Leer grabaciones de archivos no deseables no destructivamente
Descargar ahora

Io :: mark Clasificación y resumen

Anuncio publicitario

  • Rating:
  • Licencia:
  • Perl Artistic License
  • Nombre del editor:
  • Andy Armstrong
  • Sitio web del editor:
  • http://search.cpan.org/~andya/

Io :: mark Etiquetas


Io :: mark Descripción

Lea los archivos de archivos iniciosos no destructivos Imagina que tienes una función get_image_size. Usted le pasa un archivo de archivo que está abierto en un archivo de imagen y devuelve las dimensiones de la imagen.imagine también que tiene un zócalo abierto en el que espera recibir una imagen. Le gustaría saber las dimensiones de esa imagen y también capturar sus datos. Si pasa la manija del zócalo a get_image_size, consumirá algunos datos de ese socket, suficiente para leer el encabezado de la imagen y resolver sus dimensiones. Lamentablemente, cualquier dato que get_Image_size lee se pierde; Usted sabe las dimensiones de la imagen, pero ha perdido algunos de sus datos y no puede rebobinar el zócalo para volver al inicio de la imagen; Los sockets no son buscados. Sub Send_Image {My $ Socket = Shift; # Esto funciona bien ... mi ($ ancho, $ altura) = get_image_size ($ socket); # ... Pero los datos que enviamos aquí le faltarán cualquier encabezado # bytes get_image_size consumido. send_image_data ($ ancho, $ altura, $ socket); } Puede limpiar toda la imagen en un archivo, abra el archivo y pase esa manija para get_image_size. Eso funciona, pero significa que no podemos calcular el tamaño de la imagen hasta que tengamos toda la imagen. Si en lugar de un archivo de imagen estábamos lidiando con el audio de transmisión, el flujo de entrada podría ser efectivamente infinito, lo que lo haría en caché en un inconveniente de los archivos. Podríamos reescribir a Get_Image_Size para cachar a los datos que lee desde el zócalo. Luego podríamos enviar esos datos antes de enviar el resto de los datos desde el zócalo. Eso probablemente significa cavar alrededor de una función, no escribimos y acoplamos su interfaz firmemente a nuestra aplicación. Sería bueno evitar eso. Aquí está la solución: Use Io :: Mark; Sub Send_Image {My $ Socket = Shift; My $ Mark = IO :: Mark-> Nuevo ($ socket); # Esto funciona bien ... mi ($ ancho, $ altura) = get_image_size ($ marca); $ Mark-> Cerrar; # ... y también lo hace esto! send_image_data ($ ancho, $ altura, $ socket); } :: Mark es un IO :: Mango que devuelve los datos de la manija desde la cual se creó sin consumir los datos desde el punto de vista del mango original. Nota la llamada explícita para cerrar una vez que hayamos terminado con $ Marcos. Mientras la manija de IO :: Marcar está en alcance y abra cualquier dato que se lea de la manija original se almacenará en la memoria en caso de que también se le lea de la manija clonada. Para evitar que esto cierre explícitamente el asa clonada o permita que salga de Scope.Synopsis Use Io :: Mark; Sub examinar {Myâ $ FH = Cambio; My $ Mark = IO :: Mark-> Nuevo ($ FH); My $ BUF; # Lee desde $ FH a través de $ Mark $ Mark-> Leer ($ BUF, 1000, 0); # Haz algo con $ BUF # Cuando $ Mark sale de SCOPE $ FH, no aparecerán datos para haber sido consumidos a partir de $ FH} Requisitos: · Perl


Io :: mark Software relacionado