Бинарный тип Java в файле - PullRequest
       30

Бинарный тип Java в файле

0 голосов
/ 19 ноября 2011

У меня проблема с двоичным типом. У меня есть двоичный файл с данными. Каждый элемент разделен на "_". Я использую
DataInputStream in = new DataInputStream(new FileInputStream("C:/Data/"+names));, где names - это имя моего двоичного файла. Как я могу прочитать этот файл и сохранить элементы в массиве? Это возможно?

Ответы [ 3 ]

3 голосов
/ 19 ноября 2011

При записи в двоичный файл нет необходимости разбивать каждый элемент в матрице на «_».Программа знает, сколько байтов выделено для каждого элемента.

В следующем коде запись 2 удваивается без '_' между ними.После этого он считывает их обратно из файла и выводит данные.

public class Test {
    public static void main(String[] args) throws Exception {
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("a.bin"));
        dos.writeDouble(1.2);
        dos.writeDouble(3.4);
        dos.close();

        DataInputStream dis = new DataInputStream(new FileInputStream("a.bin"));
        System.out.println(dis.readDouble());
        System.out.println(dis.readDouble());
        dis.close();
    }
}

Программа выводит:

1.2
3.4

Но если вы не записали файл, и есть '_ 'между элементами, вы можете использовать readChar() после чтения каждого элемента из двоичного файла, как уже упоминалось @Bhaskar.

Наконец, с помощью ObjectOutputStream можно записать весь массив сразу.

public class Test {
    public static void main(String[] args) throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.bin"));
        double[] a = {1.2, 3.4};
        oos.writeObject(a);
        oos.close();

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.bin"));
        double[] b = (double[]) ois.readObject();
        System.out.println(b[0]);
        System.out.println(b[1]);
        ois.close();
    }
}
1 голос
/ 19 ноября 2011

Это зависит от того, как данные были записаны в этот файл.Если он был написан с использованием DataOutputStream writeXXX(), где XXX обозначает фактический тип данных элементов, а элементы отделены writeChar('_'), то вы можете легко прочитать их обратно, используя DataInputStream readXXX() метод.Просто убедитесь, что вы читаете элементы в точной последовательности, в которой они были написаны, а также что вы используете readChar() всякий раз, когда ожидаете присутствия - (то есть между двумя элементами).

0 голосов
/ 19 ноября 2011

Вы можете использовать read(byte[]) или read(byte[],ffset,length) для чтения содержимого файла в байтовый массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...