![]() |
Escribir en un fichero array de bytes y recuperarlos Hola a todos, estoy realizando una aplicación en la que tengo que escribir a un fichero unos arrays de bytes. Concretamente son strings, pero los paso a arrays de bytes con byte [] a = cadena.getBytes(); Luego, escribo ese array en un fichero de texto, y desde otro programa necesito abrir dicho fichero y leer lo que tiene a otro array de bytes. Lo que pasa es q necesito leer justo los caracteres q contiene el fichero (es decir, justo lo que contenia el array inicial). ¿Cómo lo hago? Gracias un saludo. |
Re: Escribir en un fichero array de bytes y recuperarlos Wenas el metodo length() de la clase File te devuelve el tamaño del fichero en bytes. Saludos. |
Re: Escribir en un fichero array de bytes y recuperarlos Cita:
Quizá es que no entiendo lo que quieres decir. S! |
Re: Escribir en un fichero array de bytes y recuperarlos Pues que yo solo sé hacerlo de la forma: byte [] a = new byte[1000]; fileInput.read(a); |
Re: Escribir en un fichero array de bytes y recuperarlos Ah. Pero es que esa no es la forma "correcta" de leer de un Stream. Así sólo lees un trozo, el cual puede ser más grande o más pequeño dependiendo de varios factores. Hay que usar un bucle. Aquí puedes ver un ejemplo muy básico: http://java.sun.com/docs/books/tutor...testreams.html Recalcar que es un ejemplo muy básico que lee los bytes uno a uno. Lo normal es usar un BufferedInputStream por encima del InputStream, por ejemplo, para leer de más en más. S! |
Re: Escribir en un fichero array de bytes y recuperarlos Hola, gracias por responder. Lo que pasa es que yo lo que leo, lo quiero almacenar en array de bytes tambien, por eso no sé de qeu tamaño definirlo. |
Re: Escribir en un fichero array de bytes y recuperarlos No es ningún problema. Aunque parece un poco complejo al principio, la parte de IO de Java es bastante flexible. La idea básica es que tienes "chorros de bytes" = InputStream/OutputStream (unos son de lectura y otros de escritura). Sobre esos objetos básicos tu puedes ir "montando" filtros que son otros Stream para añadir funcionalidad (para comprimir, leer/escribir de forma más eficiente, (de)serializar objetos...). Entonces, dentro de los Stream hay unos tipos que son básicos, que són los que no se montan sobre otros y eso son los que leen/escriben realmente los bytes (File...Stream, ByteArray...Stream, Socket...Stream) y es con estos con los que tienes que empezar a montar tu "torre de streams". Así que cuando quieres trabajar con IO en Java, tienes que pensar en tres pasos: 1.- De donde va a salir la información -> Te indica el Stream de base 2.- Donde/com quieres que acabe -> Te indica el último Stream de uso 3.- Una vez tienes uno y dos, tienes que averiguar que combinación de Streams tienes que usar para juntar uno con otro, y que pasos intermedios te conviene dar. Ejemplos: 1) .- Si vas a leer de un fichero, tu base es un FileInputStream .- Si vas a leer de un array de bytes en memoria, tu base es ByteArrayInputStream .- Si lees de un socket, tu base será un SocketInputStream etc. 2) .- Si lo que vas a leer son Objetos serializados, por ejemplo, pues tu ultimo Stream ha de ser un ObjectInputStream .- Si lo que quieres leer son "lineas", entonces te buscas un stream que tenga el metodo "readLine()" etc. 3) .- Para aumentar el rendimiento, sobre la base casí siempre se añade un BufferedInputStream .- Si los datos en estan comprimidos con Gzip, sobre tu torre montas un GzipInputStream etc. Así que en tu caso -> Para leer el fichero: 1) Quieres leer de un fichero, asi que tu base es un FileInputStream 2) Quieres leer bytes, asi que no te hace falta nada sofisticado 3) Para no leer los bytes uno a uno, un BufferedInputStream Para guardar la información que lees 1) Quieres guardar los bytes en memoria en un array de bytes, asi que tu base de escritura será un ByteArrayOutputStream 2) Cuando leas del fichero, leeras arrays de bytes, asi que hay que buscar un Stream que te deje escribir byte[], en este caso es muy facil ya que OutputStream directamente lo soporta 3) Como guardas los bytes en memoria, no hace falta nada aqui, en principio. Y así ya tienes las piezas del puzzle. En codigo quiere decir que creas un FileInputStream, luego usas el constructor de BufferedInputStream (BIS) pasandole como parametro el FileInputStream. Creas un ByteArrayOutputStream (BOS) y, a medida que lees arrays de bytes del BIS, los escribes en el BOS. Cuando acabes de leer todo el fichero, tendras en memoria todo el contenido, dentro del BOS, que "casualmente" tiene un metodo llamado "toByteArray()" ;-). Es una buena idea jugar con estas cosas, ya que es muy muy flexible.Yo una vez "monte" un stream para guardar objetos serializados, comprimidos con gzip, a través de un buffer, en una tabla de BDD y si montas las piezas como toca, de simple parece magia :-). Ahora te toca a ti jugar. S! |
Re: Escribir en un fichero array de bytes y recuperarlos lo intento... Hago: int leido; byte [] vector; FileInputStream entrada = new FileInputStream ("Fichero.txt"); BufferedInputStream buffer = new BufferedInputStream(entrada); ByteArrayOutputStream salida = new ByteArrayOutputStream(vector); leido = buffer.read(clave); while (leido != -1) { salida.toByteArray(clave); leido = buffer.read(clave); } Pero algo tengo mal pq no me tiene sentido :( Y no entcuentro ejemplos del estilo mezclando los flujos :'( |
Re: Escribir en un fichero array de bytes y recuperarlos Código: byte[] copiarFicheroAMemoria(String nombreFichero)S! |
Re: Escribir en un fichero array de bytes y recuperarlos Muchas gracias, es que nunca habia usado este tipo de flujos (solo leer y escribir líneas) y se me hace algo complicado. Lo dicho, gracias! |
Re: Escribir en un fichero array de bytes y recuperarlos Para escribir en el fichero un array de bytes (el que luego quiero recuperar): FileOutputStream fileOut = new FileOutputStream ("Fichero.txt"); BufferedOutputStream buffer = new BufferedOutputStream(fileOut); //byte arrayRes es el array de bytes que quiero guardar buffer .write(arrayRes); buffer.flush(); buffer.close(); Y una pregunta mas: para comparar si dos arrays de bytes son iguales, ¿puede hacerse (array1 == array2)? Muchas gracias saludos! |
Re: Escribir en un fichero array de bytes y recuperarlos En cuanto a lo primero: si, añadiendo el control de excepciones, claro. En cuanto a lo segundo: no. == sirve para decir que dos objetos son el mismo, no si son iguales. En el caso de Arrays tendrás que comparar elemento a elemento. S! |
Respuesta: Escribir en un fichero array de bytes y recuperarlos que tipo de flujo debo utilizar para recuperar un arreglo que se ha almacenado en un archivo? ayudaaaaaaa!! |
| La zona horaria es GMT -6. Ahora son las 00:22. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.