Java con ficheiros de bytes
Sumario
Java con Ficheiros de Bytes
O fluxo de bytes é a maneira máis eficiente de traballar con entrada e saída de bytes, e tamén a máis simple e de baixo nivel. Neste caso traballarase con bytes directamente que se almacenan nos ficheiros en formato binario.
PENDIENTE IMAGEN
Java ofrécenos o paquete básico de Entrada/Saída java.io. Partindo deste paquete temos as dúas clases para a manipulación de ficheiros con fluxo de bytes:
- FileInputStream clase que define as operacións básicas de entrada de bytes con ficheiros.
- FileOutputStream clase que define as operacións básicas de saída de bytes con ficheiros.
Java sempre crea un obxecto para asignarlle un fluxo de bytes. As anteriores clases herdan das clases abstractas InpusStream e OutputStream respectivamente.
Operacións básicas
- Método read(): método da clase FileInputStream, que lee do fluxo de entrada un byte (8 bits) e devolve un int (tipo primitivo de java). Hai dúas posibilidades:
Lectura normal: devolve un int (24 ceros á esquerda e 8 bits resultante da lectura). Lectura fin do stream: obtense o valor “-1”. int read(): Reads a byte of data from inputstream
- Método write(): método da clase FileOutputStream, que escribe no ficheiro un byte pero sempre a partires dun int (cast forzoso quédase cos últimos 8 bits)
void write (int b): o mesmo pero escribe o número de bytes ó fluxo de saída
- Método flush(): método que forza o gardado no stream o no writer de bytes.
Exemplo → FluxoBytes.java
Actividade
Desenvolve un programa que realice unha copia byte a byte dun arquivo pasado por parámetros.
Solución → Actividade2.java
Java.NIO
A partires da versión 1.4 de Java existe un novo paquete de funcionalidades de entrada e saída que evita as deficiencias de java.io e fai máis sinxelo o uso de streams (métodos máis directos). Centrándonos en ficheiros, mellora o rendemento das operacións, aparecen habilidades asíncronas (chamadas sen bloqueo), etc…
Operacións básicas
- Files.write: método estático de escritura de bytes. É necesario indicarlle a ruta, o contido a escribir e unha opción de escritura:
1 Path Files.write(Path path,byte[] bytes, StandardOpenOption options) throws IOException
Aspectos a ter en conta é que devolve a ruta do ficheiro a escribir. Para o terceiro argumento do método o máis frecuente é utilizar o enumerado StandardOpenOption, que ten múltiples opcións (enlace das opcións): hai que telas en conta para a forma de abrir o ficheiro.
- Files.readAllBytes: método estático para ler desde un ficheiro e volcalo a unha matriz de bytes. Necesita unha ruta, é cerra o ficheiro cando chega o final ou hai un erro de entrada ou saída.
1 byte[] readAllBytes(Path path) throws IOException
Exemplo → FluxoBytesNIO
Interface Path e clase Paths: utilidades do paquete java.NIO para manexar rutas do sistema, no noso caso rutas de ficheiros.
A clase Paths ten métodos estáticos que devolve a interface Path a partires dunha URI o cadena de caracteres. A interface Path é un argumento de diferentes métodos en java.NIO, que representa a fonte de información. Un posible uso do método readAllBytes() é usalo xunto co constructor de String. Se queremos obter unha cadea de alfanuméricos de todo o contido do ficheiro podes empregalo así: String content = new String(Files.readAllBytes(Paths.get("readMe.txt")), StandardCharsets.UTF_8);