2016-04-02 4 views
0

Ich möchte 128 Bytes meiner Datei lesen und in ein Byte-Array einfügen, um etwas mit den 128 Bytes zu verarbeiten. Dies sollte über die gesamte Länge der Datei iterieren (d. H. Jedes Mal die nächsten 128 Bytes lesen und in ein Byte-Array speichern und die Verarbeitung durchführen). Ich bin derzeit in der Lage, alle Bytes aus der Datei in ein einzelnes Bytearray zu lesen.Wie lese ich eine bestimmte Anzahl von Bytes aus einer Datei in ein Byte-Array in Java?

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

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

Jede Hilfe würde sehr geschätzt werden.

+3

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

+0

'byte [] bytes = neues Byte [128];' dann .. mach was er oben gesagt ganz einfach – 3kings

+0

... und überprüfen Sie den Rückgabewert - der letzte Lesevorgang ist in der Regel kürzer als die Array-Länge - und dann kommt -1 für EOF. – laune

Antwort

1

Sie sollten nur Fileinputstream verwenden:

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

* ... sollte über die gesamte Länge der Datei iterieren. * Vielleicht ein bisschen verbessern? – laune

+0

Wie ich lese die ersten 128 Bytes aus der Datei. Dann lese die nächsten 128 Bytes ... Mach weiter, bis ich das Ende der Datei erreiche – Ilakkiya

+0

Ich habe meine Antwort bearbeitet. Jetzt ist es ok? –

0

Hier ist etwas, was Sie tun können.

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

Beachten Sie, dass dies nicht unbedingt 128 Bytes gleichzeitig liest - es liest * bis * 128 Bytes. –

+0

@AndyTurner Ahh okay, wäre es eine Möglichkeit, 128 Bytes gleichzeitig zu lesen? Vielleicht wie in der folgenden Antwort? – 3kings

+0

Nein, diese Antwort hat das gleiche Problem wie sie ist. Sie müssen die Anzahl der gelesenen Bytes überprüfen (den Rückgabewert von 'read') und dann weiterlesen, bis Sie 128 Bytes haben. –

Verwandte Themen