2016-04-02 2 views
0

Я хотел бы прочитать 128 байтов моего файла и поместить в массив байтов, чтобы выполнить некоторую обработку с 128 байтами. Это должно повторяться по всей длине файла (т. Е. Каждый раз читать следующие 128 байтов и хранить в массиве байтов и выполнять обработку). В настоящее время я могу прочитать все байты из файла в один массив байтов.Как читать определенное количество байтов из файла в массив байтов в Java?

public static void main(String[] args) throws IOException { 

    Path path = Paths.get("path/t/file"); 
    byte[] bytes = Files.readAllBytes(path);    } 

Любая помощь будет глубоко оценена.

+3

[ 'FileInputStream.read (байт [])'] (https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html#read (байт [])) –

+0

'byte [] bytes = new byte [128];' then .. делать то, что он сказал выше, довольно легко – 3kings

+0

... и проверить возвращаемое значение - последнее чтение обычно короче длины массива, а затем приходит -1 для EOF. – laune

ответ

1

Вы должны просто использовать FileInputStream:

try { 
     File file = new File("file.ext"); 
     RandomAccessFile data = new RandomAccessFile(file, "r"); 

     byte[] fullBytes = new byte[(int) file.length()]; 
     byte[] processBytes = new byte[128]; 

     for (long i = 0, len = file.length()/128; i < len; i++) { 
      data.readFully(processBytes); 

      // do something with the 128 bytes (processBytes). 
      processBytes = ByteProcessor.process(processBytes) 

      // add the processed bytes to the full bytes array 
      System.arraycopy(processBytes, 0, fullBytes, processBytes.length, fullBytes.length); 

     } 

    } catch (IOException ex) { 
     // catch exceptions. 
    } 
+0

* ... должен перебирать по всей длине файла. * Возможно, это немного улучшится? – laune

+0

Как и в первом, я прочитал первые 128 байт из файла. Затем прочитайте следующие 128 байт ... Продолжайте делать это, пока я не дойду до конца файла. – Ilakkiya

+0

Ive отредактировал мой ответ. Сейчас все в порядке? –

0

Вот что вы можете сделать.

public void byteStuff() 
    { 
     File file= new File("PATHT TO FILE"); 
     FileInputStream input= new FileInputStream(file); 

     byte[] bytes = new byte[128]; 

     while((input.read(bytes)) != -1) 
     { 
      //byte array is now filled. Do something with it. 
      doSomething(bytes); 
     } 
    } 
+0

Обратите внимание, что это не обязательно чтение 128 байтов за раз - оно считывает * до * 128 байт. –

+0

@ AndyTurner ahh okay, так будет ли способ читать 128 байт за раз? Может быть, как в нижнем ответе? – 3kings

+0

Нет, этот ответ имеет ту же проблему, что и он. Вам нужно проверить количество прочитанных байтов (возвращаемое значение 'read'), а затем продолжить чтение, пока не получите 128 байт. –

Смежные вопросы