Читайте и запишите из двоичного файла в Matlab

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

14
задан Amro 3 October 2011 в 23:23
поделиться

3 ответа

Как тарифицируют Ящерицу , записал, что можно использовать освобожденный для загрузки данных в вектор. Я просто хочу расшириться немного на его ответе.

Данные Чтения

>> fid=fopen('data.bin','rb') % opens the file for reading
>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them in A.

команды fopen и освободил значение по умолчанию к Прямому порядку байтов [1] кодирование для целых чисел. Если Ваш файл является Обратным порядком байтов, закодировал Вас, должен будет измениться , освободил к [1 139]

>> A = fread(fid, count, 'int16', 'ieee-be');

кроме того, если Вы хотите читать, целый файл установил

>> count=inf;

и если Вы хотите считать данные в матрицу с [1 115] n использование столбцов

>> count=[n inf];

Данные Записи

Что касается обвинения данных в файл. Команда, fwrite, в ответ счета запишет в двоичный файл. Если Вы хотите записать данные в текстовый файл, можно использовать ссылки dlmwrite

>> dlmwrite('data.csv',A,',');

[1] http://en.wikipedia.org/wiki/Endianness

Обновление

  1. формат машины (IE, , IEEE - , ieee-le , vaxd и т.д.) двоичных данных может быть указан или в , fopen или освободил команды в Matlab. Детали поддерживаемого формата машины могут быть найдены в документации Matlab fopen.

  2. Scott French комментарий к [1 111] ответ счета предлагает считать данные в int16 переменную. Чтобы сделать это использование

    >> A = int16(fread(fid,count,precision,machineFormat));
    

    , где количество является размером/формой данных, которые будут считаны, , точность является форматом данных, и , machineformat является кодированием каждого байта.

  3. Посмотрите команды fseek для перемещения файла. Например,

    >> fseek(fid,0,'bof');
    

    перемотает файл к началу, где bof обозначает [1 129] начало файла .

16
ответ дан 1 December 2019 в 10:19
поделиться

Я обычно очень не хочу видеть ссылки в ответе, но это выглядит достаточно близким:

http://www.mathworks.com/support/tech-notes/1400/1403.html

относительно второй части настройки производительности, это были 6 лет, с тех пор как я использовал Matlab, таким образом, я не знаю.

HTH

0
ответ дан 1 December 2019 в 10:19
поделиться

Принятие Вас знает, сколько значений Вы сохранили в файле, можно сделать что-то вроде этого для чтения данных в массив.

fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')

Для записи данных в файл делают это:

fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')

функция fwrite возвращает число элементов (не байты) записанный в файл.

Насколько настройка производительности идет, можно считать данные в блоках, чтобы только использовать столько, сколько необходимо обработать. Это - то же на любом языке, и нет никакого способа ускорить его, это характерно для Matlab.

10
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: