Чтение байта из char-файла устройства Linux в Java - PullRequest
0 голосов
/ 28 апреля 2018

Я пишу Java-программное обеспечение, которое работает на блоке управления с Angstrom Linux, платформой ARM. Это программное обеспечение должно считывать состояние модема gsm из файла / dev / gsm_status и знать, включен ли модем или нет.

Этот файл является символьным файлом, поэтому я прочитал значение из этого файла с помощью команды bash

dd if=/dev/gsm_status count=1 bs=1 2>/dev/null | hexdump -e '1/1 "%X\n"'

таким образом отображаемые значения равны 0 или 1.

Но я не могу прочитать файл через Java, я пробовал RandomAccessFile и FileInputStream, но всегда получаю исключение ввода-вывода.

Я думаю, что я совершенно ошибался, не могли бы вы дать мне какое-то указание?

Большое спасибо всем

обновление

Это код Java

RandomAccessFile f = new RandomAccessFile(fileDevGsmPowerStatus.getAbsoluteFile(), "r");
        f.seek(0);
        System.out.println("--" + f.readChar()+"--");

Это ошибка с RandomAccessFile и FileInpuntStream - то же самое

java.io.IOException: Input/output error
        at java.io.RandomAccessFile.read(Native Method)
        at java.io.RandomAccessFile.readChar(RandomAccessFile.java:743)
        at winger.fuelfeed.client.abt21.gsm.CinterionBGS2.getModemPowerState(CinterionBGS2.java:207)
        at winger.fuelfeed.client.FuelfeefClient.main(FuelfeefClient.java:31)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

1 Ответ

0 голосов
/ 28 апреля 2018

Возможно, попробуйте прочитать один байт данных в явном виде (в отличие от, скажем, обработки ввода как строки, как это может быть в случае некоторых читателей):

DataInputStream input = new DataInputStream(new BufferedInputStream(
    new FileInputStream("/dev/gsm_status")
));

byte b = input.readByte();
...