Zapis binarny do pliku

Odpowiedz Nowy wątek
2015-12-21 01:18

Rejestracja: 4 lata temu

Ostatnio: 1 rok temu

0

Witam!
Pisałem ostatnio klasę Configuration, która posiada metody zapisujące obiekt tej klasy do pliku oraz pobierające z pliku pola danego obiektu. Niestety, coś nie działa (prawdopodobnie metoda save(). Mógłby ktoś rzucić na to okiem?

package files;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class Configuration {

    public static void main(String args[]){
        (new Configuration()).save("config.appfile");
        Configuration con = new Configuration("config.appfile");
        con.upload("config.appfile");
        con.setDzwieki(25);
        con.setHard(true);
        con.save("config.appfile");
        con.upload("config.appfile");
        System.out.println(con.toString());
    }

    @Override
    public String toString() {
        return "Configuration [isHard=" + isHard + ", SZEROKOSC=" + SZEROKOSC + ", WYSOKOSC=" + WYSOKOSC + ", glosnosc="
                + glosnosc + ", muzyka=" + muzyka + ", dzwieki=" + dzwieki + ", musicon=" + musicon + ", soundon="
                + soundon + ", keyUP=" + keyUP + ", keyDOWN=" + keyDOWN + ", keyLEFT=" + keyLEFT + ", keyRIGHT="
                + keyRIGHT + "]";
    }
    Configuration(){}
    //pola:
        //rozgrywka
    private boolean isHard;
        //grafika
    private int SZEROKOSC, WYSOKOSC;
        //dźwięk
    private int glosnosc, muzyka, dzwieki;
    private boolean musicon, soundon;
        //sterowanie
    private int keyUP, keyDOWN, keyLEFT, keyRIGHT;

    //metody

    public Configuration(String src){

        upload(src);
    }

    public boolean upload(String src){

        File plik = new File(src);
        if(plik.exists()&&plik.isFile()){
            RandomAccessFile strumien = null;
            try {strumien = new RandomAccessFile(plik, "rw");} catch (FileNotFoundException e) {e.printStackTrace();}

            read(strumien);

            try {strumien.close();} catch (IOException e) {e.printStackTrace();}

            return true;
            }
        else{
            return false;}
    }

    private void read(RandomAccessFile strumien){

        byte[] bajty = new byte[9*32+3];
        try {strumien.readFully(bajty);} catch (IOException e) {e.printStackTrace();}
        int n=0;
        //odczyt:
            //rozgrywka
            this.isHard = bajty[n]!=0; n++;
            //grafika
            this.SZEROKOSC = getInt(bajty, n); n+=32;
            this.WYSOKOSC = getInt(bajty, n); n+=32;
            //dzwiek
            this.glosnosc = getInt(bajty, n); n+=32;
            this.muzyka = getInt(bajty, n); n+=32;
            this.dzwieki = getInt(bajty, n); n+=32;
            this.musicon = bajty[n]!=0; n++;
            this.soundon = bajty[n]!=0; n++;
            //sterowanie
            this.keyUP = getInt(bajty, n); n+=32;
            this.keyDOWN = getInt(bajty, n); n+=32;
            this.keyLEFT = getInt(bajty, n); n+=32;
            this.keyRIGHT = getInt(bajty, n); n+=32;
    }

    private int getInt(byte[] bajty, int n){
        int x=0;

        for(int i=0; i<32; i++){
            x*=2;
            x+=bajty[n+1];
        }

        return x;
    }

    public void save(String src){

        File plik = new File(src);
        if(plik.exists()==false||plik.isFile()==false){
            try {
                plik.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }

            RandomAccessFile strumien;
            try {
                strumien = new RandomAccessFile(plik, "rw");

                byte[] bajty = new byte[9*32+3];
                int n=0;

                //zapis:
                    //rozgrywka
                    if(this.isHard){bajty[n] = 1;}else{bajty[n] = 0;}
                     n++;
                    //grafika
                    bajty = setInt(bajty, this.SZEROKOSC, n); n+=32;
                    bajty = setInt(bajty, this.WYSOKOSC, n); n+=32;
                    //dzwiek
                    bajty = setInt(bajty, this.glosnosc, n); n+=32;
                    bajty = setInt(bajty, this.muzyka, n); n+=32;
                    bajty = setInt(bajty, this.dzwieki, n); n+=32;
                    if(this.musicon){bajty[n] = 1;}else{bajty[n] = 0;}
                     n++;
                     if(this.soundon){bajty[n] = 1;}else{bajty[n] = 0;}
                     n++;
                    //sterowanie
                    bajty = setInt(bajty, this.keyUP, n); n+=32;
                    bajty = setInt(bajty, this.keyDOWN, n); n+=32;
                    bajty = setInt(bajty, this.keyLEFT, n); n+=32;
                    bajty = setInt(bajty, this.keyRIGHT, n); n+=32;

                    strumien.write(bajty);

                strumien.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

    }

    private byte[] setInt(byte[] bajty, int x, int n){

        for(int i=0; i<32; i++){            bajty[n+31-i] = (byte) (x%2);
            x/=2;
        }
        return bajty;

    }

    //GETTER/SETTER AREA

    public boolean isHard() {
        return isHard;
    }

    public void setHard(boolean isHard) {
        this.isHard = isHard;
    }

    public int getSZEROKOSC() {
        return SZEROKOSC;
    }

    public void setSZEROKOSC(int sZEROKOSC) {
        SZEROKOSC = sZEROKOSC;
    }

    public int getWYSOKOSC() {
        return WYSOKOSC;
    }

    public void setWYSOKOSC(int wYSOKOSC) {
        WYSOKOSC = wYSOKOSC;
    }

    public int getGlosnosc() {
        return glosnosc;
    }

    public void setGlosnosc(int glosnosc) {
        this.glosnosc = glosnosc;
    }

    public int getMuzyka() {
        return muzyka;
    }

    public void setMuzyka(int muzyka) {
        this.muzyka = muzyka;
    }

    public int getDzwieki() {
        return dzwieki;
    }

    public void setDzwieki(int dzwieki) {
        this.dzwieki = dzwieki;
    }

    public boolean isMusicon() {
        return musicon;
    }

    public void setMusicon(boolean musicon) {
        this.musicon = musicon;
    }

    public boolean isSoundon() {
        return soundon;
    }

    public void setSoundon(boolean soundon) {
        this.soundon = soundon;
    }

    public int getKeyUP() {
        return keyUP;
    }

    public void setKeyUP(int keyUP) {
        this.keyUP = keyUP;
    }

    public int getKeyDOWN() {
        return keyDOWN;
    }

    public void setKeyDOWN(int keyDOWN) {
        this.keyDOWN = keyDOWN;
    }

    public int getKeyLEFT() {
        return keyLEFT;
    }

    public void setKeyLEFT(int keyLEFT) {
        this.keyLEFT = keyLEFT;
    }

    public int getKeyRIGHT() {
        return keyRIGHT;
    }

    public void setKeyRIGHT(int keyRIGHT) {
        this.keyRIGHT = keyRIGHT;
    }

}
edytowany 1x, ostatnio: juna8001, 2015-12-21 01:36

Pozostało 580 znaków

2015-12-21 07:17
Moderator

Rejestracja: 12 lat temu

Ostatnio: 4 minuty temu

Lokalizacja: Wrocław

0

Zapisujesz jednego inta na 32 bajtach? :|
Poza tym coś nie działa to se możesz powiedzieć do pani w okienku - na forum bądź specyficzny.


public void setWYSOKOSC(int wYSOKOSC) {
        WYSOKOSC = wYSOKOSC;
    }

Litości... Poczytaj o jakiejś konwencji nazewnictwa i trzymaj się jej.
Raz polski, raz angielski, raz Musicon, raz WYSOKOSC, potem jeszcze kombinacja "no bo wyświetla błont" i powstało wYSOKOSC, jezu kryste...


edytowany 3x, ostatnio: Patryk27, 2015-12-21 07:22

Pozostało 580 znaków

2015-12-21 07:32
Moderator

Rejestracja: 11 lat temu

Ostatnio: 1 miesiąc temu

2

Musisz się tak bawić w zapisywanie i odczytywanie? Nie prościej korzystać z serializacji?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-12-21 16:58

Rejestracja: 4 lata temu

Ostatnio: 1 rok temu

0

Właściwie o to mi chodziło, ale nie wiedziałem o serializacji. To powinno rozwiązać mój problem. Dzięki

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0