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

Obtener array de bytes a partir de un file

Estas en el tema de Obtener array de bytes a partir de un file en el foro de Java en Foros del Web. Hola me gustaria saber si alguien sabe como se hace para obtener un array de bytes a partir de un File? saludos y gracias...
  #1 (permalink)  
Antiguo 25/09/2008, 12:00
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Obtener array de bytes a partir de un file

Hola me gustaria saber si alguien sabe como se hace para obtener un array de bytes a partir de un File?

saludos y gracias
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
  #2 (permalink)  
Antiguo 25/09/2008, 12:28
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Respuesta: Obtener array de bytes a partir de un file

hola, aqui esta exactamente lo que quieres hacer:

http://www.exampledepot.com/egs/java...ray.html?l=rel

saludos,
  #3 (permalink)  
Antiguo 25/09/2008, 12:49
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Obtener array de bytes a partir de un file

Gracias igual ya habia podido de una manera mas sencilla por las dudas dejo el codigo

Código:
FileInputStream input;
byte[] data=null;
try {
	nput = new FileInputStream(file);
	data = new byte[input.available()];
	input.read(data);
	input.close();
} catch (Exception e) {
        e.printStackTrace();
}
saludos
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
  #4 (permalink)  
Antiguo 25/09/2008, 14:05
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Obtener array de bytes a partir de un file

Ese codigo no es correcto , ya que read() no asegura leer todo de golpe y available solo te devuelve el numero de bytes que podras leer sin tener que esperar por operaciones de I/O, lo cual varia segun la carga del S.O.

Así que así no puedes asegurar que lees el fichero completo. Si el fichero es pequeño y el S.O. no esta muy ocupado... quizá.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 26/09/2008, 06:57
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Obtener array de bytes a partir de un file

mmmm interesante GrennEyed, se te ocurre alugna otra manera de hacerlo?

saludos
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
  #6 (permalink)  
Antiguo 26/09/2008, 08:42
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Respuesta: Obtener array de bytes a partir de un file

Cita:
Iniciado por djagu_26 Ver Mensaje
mmmm interesante GrennEyed, se te ocurre alugna otra manera de hacerlo?

saludos
por que no quieres usar la forma que viene en el link que puse?
  #7 (permalink)  
Antiguo 26/09/2008, 11:11
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Obtener array de bytes a partir de un file

blackwind: en realidad no es que no lo quiera usar, me parece que tiene que existir una forma mas sencilla que ya este hecha sin necesidad de un for, igualmente por ahora estoy usando lo que puse yo, en caso que me de problemas tendre que usar lo que me pasastes tu.

saludos y cuidate
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
  #8 (permalink)  
Antiguo 26/09/2008, 14:24
 
Fecha de Ingreso: noviembre-2003
Ubicación: Mexico
Mensajes: 1.081
Antigüedad: 20 años, 5 meses
Puntos: 7
Respuesta: Obtener array de bytes a partir de un file

en serio 18 lineas de codigo con error checking no se te hace lo suficientemente sencillo?
el tuyo tiene 10 lineas de codigo, no lo hace y no checa errores...
  #9 (permalink)  
Antiguo 26/09/2008, 14:56
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Obtener array de bytes a partir de un file

Yo para no estar demasiado atado a que leo de un fichero y se su longitud a priori, uso el tipico bucle leyendo a través de un buffer hasta que no hay, escribiendolo en un ArrayOutputStream y de ahi sacando los bytes. Eso seguro que no da problemas.

Ojo con la solucion que planteas, djagu, por que el mismo programa leyendo el mismo fichero puede funcionarte una ejecución y fallarte la siguiente por que el disco este ocupado haciendo otra cosa.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #10 (permalink)  
Antiguo 26/09/2008, 18:33
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Obtener array de bytes a partir de un file

En realidad es una aplicacion web, se supone que tenemos un servior entero contratado en miami para corre la aplicacion, o sea no deberiamos tener problemas con el uso del mismo, por mas que 100 usuarios esten usando la aplicacion que en ese mismo momento

Cita:
en serio 18 lineas de codigo con error checking no se te hace lo suficientemente sencillo?
el tuyo tiene 10 lineas de codigo, no lo hace y no checa errores
en cuanto al tema de sencilles no lo digo por la cantidad de lineas, me parece raro no tener un metodo de los InputStream, FileInputStream, BufferedFileReader, etc que ya te devuelva el array de bytes que algo que se debe usar muchisimo en programacion me entiendes?

Cita:
Yo para no estar demasiado atado a que leo de un fichero y se su longitud a priori, uso el tipico bucle leyendo a través de un buffer hasta que no hay, escribiendolo en un ArrayOutputStream y de ahi sacando los bytes. Eso seguro que no da problemas.
Tienes algun ejemplo de esto para pasarme?

saludos y gracias a los dos
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
  #11 (permalink)  
Antiguo 27/09/2008, 03:23
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Obtener array de bytes a partir de un file

Cita:
Iniciado por djagu_26 Ver Mensaje
En realidad es una aplicacion web, se supone que tenemos un servior entero contratado en miami para corre la aplicacion, o sea no deberiamos tener problemas con el uso del mismo, por mas que 100 usuarios esten usando la aplicacion que en ese mismo momento
No es cuestion de que el servidor sea o no suficiente. Es que es algo que depende del S.O. y, lo mas importante, no puedes garantizar que funcionará bien. Un programa que funciona bien a veces no es un programa correcto, aunque ahora mismo no falle. No hay vuelta de hoja.


Cita:
Iniciado por djagu_26 Ver Mensaje
en cuanto al tema de sencilles no lo digo por la cantidad de lineas, me parece raro no tener un metodo de los InputStream, FileInputStream, BufferedFileReader, etc que ya te devuelva el array de bytes que algo que se debe usar muchisimo en programacion me entiendes?
Si y no . Tampoco es tan común leer todo en memoria, ya que no suele ser la forma más eficiente de trabajar con ficheros. Además, hay que tener en cuenta que el API IO en Java está hecho para funcionar igual con ficheros, sockets, y cualquier otra cosa que maneje "tiras de bytes", y en muchos casos leerlo todo de golpe no es posible ni deseable, así que es "normal" que no incluya un metodo genérico para hacerlo. De todas formas hacerlo es relativamente sencillo.

El metodo que enlaza Blackwind funciona y es más estilo "C", usando solo un buffer y usando offsets, aunque tiene un problema por que si salta una excepcion despues de abrir el fichero, el InputStream quedaría abierto.

Cita:
Iniciado por djagu_26 Ver Mensaje
Tienes algun ejemplo de esto para pasarme?
Mas o menos, algo así. Hay que tener en cuenta que si el fichero es de texto, mejor usar los equivalente en Reader... Si no fuera un ByteArrayOutputStream , seguramente tambien encapsularía el OutputStream con un BufferedOuputStream y el reset/flush serían distintos, con un close etc. El buffer lo he hecho de 4K, pero se podría hacer más grande segun la memoria que queramos destinar a eso. 16K o 32K tampoco son ninguna barbaridad, en función del I/O de nuestro sistema.

A lo mejor no es tan eficiente como otras soluciones, pero sirve practicamente igual para cualquier tipo de InputStream y no deja nunca abierto el InputStream que recibe. Como se puede ver, el numero de lineas y lo verborreico de un codigo no me importa. Me importa más que no de problemas y sea claro .
Código PHP:
    String fileName "...";
    
byte[] fileContent null;
    
ByteArrayOutputStream theBAOS = new ByteArrayOutputStream();
    
FileInputStream theFIS null;
    try
    {
      
theBAOS.reset();
      
theFIS = new FileInputStream(fileName);
      
BufferedInputStream theBIS = new BufferedInputStream(theFIS);
      
byte[] buffer = new byte[4096];
      
int bytesRead;
      while ((
bytesRead theBIS.read(buffer)) >= 0)
      {
        
theBAOS.write(buffer0bytesRead);
      }
      
theBAOS.flush();
      
fileContent theBAOS.toByteArray();
    }
    catch (
IOException e)
    {
      
// Notificar error y si hace falta, encapsular la excepción y/o relanzar
    
}
    
finally
    
{
      if (
theBAOS != null)
      {
        
theBAOS.reset();
      }
      if (
theFIS != null)
      {
        try
        {
          
theFIS.close();
        }
        catch (
IOException e)
        {
          
// Notificar error cerrando fichero, seguramente aqui no hace falta relanzar pero si escribirlo en los logs
          // por que no deberia pasar
        
}
      }
    } 
S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #12 (permalink)  
Antiguo 27/09/2008, 10:32
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Respuesta: Obtener array de bytes a partir de un file

OK muchas gracias, lo pruebo mira para que tengas una idea el uso de esto no es mucho solo es permitirles a los usuarios que puedan subir archivos adjuntos y estos se guardan en la base como BLOB, estoy usando richfaces que supuestamente el componente tiene un metodo que devuelve el array de bytes y un objeto file, por alguna razonn el array siempre esta en null, pero el file esta cargado correctamente, a esto venia mi pregunta inicial

saludos y muchas gracias a los dos

pd: si alguno quiere agregarme al msn esta publico en mi perfil
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
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 14:29.