Чтение двоичного файла в байтовый массив - PullRequest
1 голос
/ 23 января 2020

Мне нужно прочитать двоичный файл и сохранить каждый байт в байтовом массиве. Я читал другие сообщения от stackoverflow по этой теме c, но не могу понять, почему мой не работает. Вот что у меня есть:

String fileOne = "file1.bin";
byte[] byteArray = new byte[1000];
try{
    FileInputStream fileIS = new FileInputStream(fileOne);
    ObjectInputStream is = new ObjectInputStream(fileIS);
    is.read(byteArray);
    is.close();
    for(int i =0; i < byteArray.length; i++){
        System.out.println(byteArray[i]);
    }
}
catch (FileNotFoundException e){
    e.toString();
    System.exit(0);
}
catch (IOException io){
    io.toString();
    System.exit(0);
}

1 Ответ

1 голос
/ 24 января 2020

Вот способ прочитать содержимое файла в массив byte. FileInputStream - это все, что вам нужно - оставьте ObjectInputStream вне этого (если вы явно не имеете дело с данными, которые были созданы из ObjectOutputStream, но это не так, поскольку вы вызываем println() на каждый байт).

public static void main(String[] args) {
    String filename = "file1.bin";
    try (FileInputStream fis = new FileInputStream(filename)) {
        byte[] bytes = fis.readAllBytes();
        for (byte b : bytes) {
            System.out.print(b);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Несколько вещей здесь:

  • опустить использование ObjectInputStream - не требуется для чтения байтовых данных, и не будет работать, если данные не были созданы соответствующим потоком вывода. Из Javado c: "ObjectInputStream десериализует примитивные данные и объекты, ранее написанные с использованием ObjectOutputStream."

  • use try с ресурсами - он закроет связанный с вами поток

  • catch Exception - в опубликованном вами коде вы увидите информацию, только если выброшено FileNotFoundException или IOException. Во всем остальном ваш код не обрабатывает их и не распечатывает информацию.

...