Witam mam pewien problem a dokładniej to jak czytać z pliku binarnego określoną strukturę danych i zamienianie tego na odpowiednie typy.
Dokładniej to mam plik binarny z którego powinienem przeczytać w taki sposób:
3 bajty - powie mi ilu jest użytkowników do wczytania z pliku.
a dalej mamy juz strukturę która się powtórzy * ilość użytkowników.
a struktura wygląda tak :
5 bajtów to numer klienta (int)
5 bajtów to hasło (int)
10 bajtów jego nazwa (char)
nie wiem jak to zrobić aby czytać po kolei ilość bajtów i przekonwertowywać tą ilość bajtów na dany typ.
Proszę o pomoc.
Czytanie z pliku binarnego
Re: Czytanie z pliku binarnego
Musisz dokonać serializacji obiektu. Pokazuje jak to zrobić w video kursie java strumienie lekcja 9.
Re: Czytanie z pliku binarnego
Obejrzałem ale mam taki oto problem trochę z innej beczki używam metody int read( byte bufor[ ], int poz, int ile )
i jak czytam od 0 do 3 bitu to jest ok a jak chce wczytac dalej czyli od4 bitu do 9 to pisze mi ze nie ma pliku.
Mój programik .
Jest tam trochę nadmiarowości ale to chyba nie przeszkadza.
Panie Arkadiuszu proszę jeszcze o dalsza pomoc.
i jak czytam od 0 do 3 bitu to jest ok a jak chce wczytac dalej czyli od4 bitu do 9 to pisze mi ze nie ma pliku.
Mój programik .
Code: Zaznacz cały
package plik;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Plik {
public static void main(String[] args) {
int licznik = 0;
String CurDir = System.getProperty("user.dir");
try {
FileOutputStream plik2 = new FileOutputStream("plik.txt");
FileInputStream plik = new FileInputStream("BAK.YG2");
byte[] vec = new byte[3];
plik.read(vec, 0, 3);
// int read( byte bufor[ ], int poz, int ile )
for (int i = 0; i < vec.length; i++)
{
short read;
licznik = read = (short) (vec[i]& 255 );
}
System.out.println("Liczba wczytanych uzytkowników: " + licznik);
plik2.write(licznik);
} catch (Exception ex) {
System.out.println("Brak pliku ! w lokalizacji " +CurDir);
}
}
}
Panie Arkadiuszu proszę jeszcze o dalsza pomoc.
Re: Czytanie z pliku binarnego
Jeszcze w woli sprostowania chodzi mi o taki kawałek kodu:
byte[] vec = new byte[3];
plik.read(vec, 0, 3);
to działa
i teraz jak bym chiał od 4 do 9 byta wczytywać.
byte[] vec = new byte[5];
plik.read(vec, 4, 9);
to zwraca ze nie może znaleźć pliku.
byte[] vec = new byte[3];
plik.read(vec, 0, 3);
to działa
i teraz jak bym chiał od 4 do 9 byta wczytywać.
byte[] vec = new byte[5];
plik.read(vec, 4, 9);
to zwraca ze nie może znaleźć pliku.
Re: Czytanie z pliku binarnego
Te parametry działają zdecydowanie inaczej:
http://docs.oracle.com/javase/1.4.2/doc ... tml#read()
Czemu nie skorzystasz z serializacji tak jak powiedziałem?
źródło:public int read(byte[] b,
int off,
int len)
throws IOException
Parameters:
b - the buffer into which the data is read.
off - the start offset in array b at which the data is written.
len - the maximum number of bytes to read.
http://docs.oracle.com/javase/1.4.2/doc ... tml#read()
Czemu nie skorzystasz z serializacji tak jak powiedziałem?
Re: Czytanie z pliku binarnego
Chyba serializacja nie pasuje oglądam tą lekcje ale chyb nie będzie to dobre dla takiej struktury:
Plik jest już dany bo jest z urządzenia.Nie wiem dalej jak takie coś czytać. Proszę nadal o pomoc ,lub podpowiedz.
The number of the users(m): 3B // The first 3 bytes of the *.yg file
Staffer information data: 28B*m // Each staffer has 27 bytes data.
Staffer ID: 5B // The first 3 bytes of staffer information data is the staffer ID
The length of the password+password: 3B // The frist bytes's higher 4 bits are the length of the password. If the staffer does not have a password,it is "ffffff".
Card number: 4B //If the staffer does not have the card number, it is "ffffffff".
Name: 10B
Department: 1B
Group Number: 1B
T&A Mode: 1B
Fingerprint enrollment: 2B //Each user can enroll two fingerprints.If the bit0 = 1, the first fingerprint is enrolled. If the bit1=1, the second fingerprint is enrolled.
Special information: 1B //(Binary system)Check the bit7-bit6. If it is 01, the staffer is normal user. If it is 11, the staffer is the manager. Check the bit4. If it is 1, the wiegand output is WG34. If it is 0, the wiegand output is WG26.
Plik jest już dany bo jest z urządzenia.Nie wiem dalej jak takie coś czytać. Proszę nadal o pomoc ,lub podpowiedz.
The number of the users(m): 3B // The first 3 bytes of the *.yg file
Staffer information data: 28B*m // Each staffer has 27 bytes data.
Staffer ID: 5B // The first 3 bytes of staffer information data is the staffer ID
The length of the password+password: 3B // The frist bytes's higher 4 bits are the length of the password. If the staffer does not have a password,it is "ffffff".
Card number: 4B //If the staffer does not have the card number, it is "ffffffff".
Name: 10B
Department: 1B
Group Number: 1B
T&A Mode: 1B
Fingerprint enrollment: 2B //Each user can enroll two fingerprints.If the bit0 = 1, the first fingerprint is enrolled. If the bit1=1, the second fingerprint is enrolled.
Special information: 1B //(Binary system)Check the bit7-bit6. If it is 01, the staffer is normal user. If it is 11, the staffer is the manager. Check the bit4. If it is 1, the wiegand output is WG34. If it is 0, the wiegand output is WG26.
Re: Czytanie z pliku binarnego
OK Panie Arkadiuszu już zajarzyłem jak to działa dziękuje za pomoc.
Mój sposób to czytanie do tablicy od bajtu 3 metodą read i co któryś bajt przerywanie i znów czytanie i jeśli jakiś bajt zostanie wczytany to powtarzam.
czyli czytam od 4 do 9 i zapisuje metoda sumuj bajty wynik i tak wkółko
Mam nadzieje że dobrze myślę ale to już jutro sprawdzę do końca czy działa ok narazie czytałem od bajtu 0 do 3 i dało mi w wyniku to co chciałem.
Mój sposób to czytanie do tablicy od bajtu 3 metodą read i co któryś bajt przerywanie i znów czytanie i jeśli jakiś bajt zostanie wczytany to powtarzam.
czyli czytam od 4 do 9 i zapisuje metoda sumuj bajty wynik i tak wkółko

Mam nadzieje że dobrze myślę ale to już jutro sprawdzę do końca czy działa ok narazie czytałem od bajtu 0 do 3 i dało mi w wyniku to co chciałem.