У меня есть файл конфигурации для программы DOS, которую я обновляю. , ,Чтение байтов из массива в массив классов Java
Файл конфигурации 17512 байт. Первые 128 байт представляют собой информацию заголовка, остальные байты делятся на 256 записей по 64 байта каждый. Каждая запись содержит определенную информацию для устройства, такого как имя (8 байтов), описание (18 байт), номер устройства (1 байт) и т. Д. Я читаю файл в большой массив байтов, а затем хочу вытащить информацию о каждом устройстве, чтобы его можно было отредактировать в новом интерфейсе графического интерфейса.
Я создал класс Device, который содержит поле для имени устройства. Я хотел создать массив этого класса, чтобы содержать все 256 устройств, но когда я пытаюсь читать имена отдельных устройств, все 256 устройств заканчиваются последним прочитанным устройством. Я не знаю, где я ошибся.
Вот код для Main.java
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
ReadConfigFile.importConfigFile(); // Read config file into byte array.
Device[] device = new Device[256]; // Create array of 256 Devices.
device[0].code = Device.setCode(0);
System.out.println(new String(device[0].code)); // First device correct here.
device[255].code = Device.setCode(255);
System.out.println(new String(device[0].code)); // First device now same as last?
System.out.println(new String(device[255].code));
Group root = new Group();
Scene scene = new Scene(root, 200, 200);
primaryStage.setTitle("Config File Editor");
primaryStage.setScene(scene);
primaryStage.show();
}
}
Вот код для класса устройств. Пока у меня только первое поле. Когда я смогу заставить его работать правильно, я добавлю остальные.
public class Device {
public static byte[] code; // 8 bytes. (1 - 8).
public Device() {
code = new byte[8]; // Constructor correct?
}
public static byte[] setCode(int devNumber) {
int devCodeByteStart = (128 + (64 * devNumber)); // Skip first 128 bytes to get to first device.
int devCodeByteStop = (devCodeByteStart + 8); // Get 8 bytes for device code.
byte[] code = new byte[8]; // Gives Null Pointer Exception if removed.
for(int byteCount = devCodeByteStart; byteCount < devCodeByteStop; byteCount++) {
code[byteCount - devCodeByteStart] = configFileBytes[byteCount];
}
return code;
}
}
Если есть лучший способ выполнить задачу, я открыт для предложений.
Вы знаете, что 'означает static'/делает? – Amit
@Amit haha ... так просто ... :) –
Все экземпляры устройства имеют один и тот же массив кода, потому что вы объявили его статическим. – JJF