Wczytywanie pliku binarnego

0

Witam.
Mam pytanie, jak, znając format pliku binarnego, wczytac go tak, zeby można było go normalnie odczytac?
Starałem się to zrobić w ten sposób:

package pakiet;

import java.io.*;



public class klasa {
	public static void main(String[] args) {
		// Otwarcie pliku
		FileInputStream in = null;
		try {
		in = new FileInputStream("1.htd");
		} catch (IOException ex) {
		System.out.println(ex.getMessage());
		System.exit(1);
		}
		// Wypisanie kolejnych bajtow na wyjscie
		int value;
		try {
		while ((value = in.read()) != -1) {
		System.out.println(value);
		}
		in.close();
		} catch(IOException ex) {
		System.out.println(ex.getMessage());
		}
		}
}

jednak to co dostaje na wyjsciu nie odpowiada temu fomratowi który powinien byc...
Z gory dziekuje za pomoc.

0

nie wiem na czym polega twoj problem i co rozumiesz przez pojecie "normalnie odczytac"?
in.read() czyta kazdy bajt po kolei (czyli od 0 do 255), wczytaj to w jakas tablice albo uzyj in.read(byte[] b).
Jak ty to sprawdzasz to co dostajesz a co powinno byc?

0

hmm no wlasnie normalnie odczytać, tzn chciałbym wiedzieć jak wygladą ten plik binarny, jakos zamienic go na normalne ascii...
rozumiem, ze to bledny tok myslenia...
W takim razie, jak wiem jaki ten plik ma format, i wczytam go bajt po bajcie to jak mam cos z niego "wyciagnac"...?
dajmy na to mam plik binarny, znam jego format np:
#define...
wczytam to do tablicy to dostaje te kolejne wartosci bajtow...
To jak moge to odtworzyc, tzn dowiedziec sie co te kolejne wartosic bajtow znacza?
Mam nadzieje ze rozumiecie o co mi chodzi...

0

"zmienic go na normalne ascii...." hmmm to raczej nie zobaczysz, chyba ze w pliku binarnym jest tylko ascii text ;) Jesli chcesz sie dowiedziec co kolejne wartosci bajtow oznaczaja to przeczytaj specyfikacje od tego formatu i jesli sa jakies markiery to ich poszukaj i uzyskasz wtedy wartosci od nich, bo z twojego programu nic sie nie dowiesz.

0

Ale zadnej specyfikacji nie ma... Zalozmy ze znam format tego pliku binarnego, ktory wyglada tak:

int nr;
double kreska,

struktura[],


struct struktura{
  int a;
  int a;
  int c;
  int d;
  int e;
  int f;
};

W jaki sposob moge sie dostac do kolejnych pol takiej struktury?

0

zrobic methody ktore te pola zwracaja, nastepnie wyciagnac to z poziomu javy, ale nie przez badanie pliku binarnego, tylko przez takie cos jak Java Native Interface

0

Nie ma innego sposobu?
Myslalem, ze jesli to sam tekst ascii to da sie to jakos odczytac...

0

to w koncu co to jest? 1.plik tekstowy, 2.plik binarny, 3.kod zrodlowy czy 4.skompilowany kod zrodlowy?? przy czym 1 = 3 i 2 = 4*

  • uogolniajac
0

To jest plik binarny, ktorego znam format.

0

To nie jest skompilowany kod zrodlowy...
Po prostu plik binarny, ktorego znam format, nie ma to nic wspolnego z kodem zrodlowym...

0
#392 napisał(a)

... Zalozmy ze znam format tego pliku binarnego, ktory wyglada tak:

int nr;
double kreska,

struktura[],


struct struktura{
  int a;
  int a;
  int c;
  int d;
  int e;
  int f;
};

W jaki sposob moge sie dostac do kolejnych pol takiej struktury?

najpierw zakladasz, ze plik binarny moze posiadac strukture jak podane przez ciebie zrodlo, a potem piszesz, ze te dwie rzeczy nie maja nic ze soba w spolnego [glowa] co ty w ogole chcesz??
moze ktos inny ci pomoze...
pozdrawiam

0

Plik binarny tak wyglada, nie posiada zadnej struktury, tylko TEKSTOWO tak wyglada.

0

up

0

Sluchaj, te tlumaczenia sa bardzo pokretne, ja nie rozumiem ani slowa, nadal nie wiem czy to jest plik binarny czy tekstowy, powaznie. Przede mna jedna osoba tez wymiekla. Mam propozycje - wrzuc gdzies ten plik, sami ocenimy jaki on jest.
Pozdrawiam.

0

Więcej osób wymiękło, tylko nie wszystkie się przyznały.

0

Hmm, dorzucilem plik, dalej nic?

0

No plik jest binarny, moze i ma struktore taka jak napisales. I co dalej? Chciales plik wczytac i go wypisac jako ascii - to nie ma sensu, wyjda smieci. Jesli bardzo chcesz to zribic, to przed wypisywaniem na ekran rzutuj na char, o tak:

int b = in.read();
System.out.println((char) b);

wyjda smieci, czasami moze sie trafi jakis znak, ale pewnie rzadko. Zreszta, jesli chcesz to samo osiagnac bez pisania kodu, to otworz ten plik w notatniku - smieciory.

Pytanie co ten plik w sobie trzyma i do czego jest wykorzystywane to cos. Napisales jakas strukture pliku, wiec pewnie jest Tobie znana i faktycznie poprawna. Pytanie, co ta struktura oznacza, i do czego jest wykorzystywana. To jest raczej trudne do odgadniecia, jesli masz plik, to musisz wiedziec co w nim jest i do czego. Dla przykladu, wez sobie plik pdf - tez bedzie duzo smieciorow, bo to plik binarny, ale jesli soft czytajacy wie co z nimi zrobic, jak zinterpretowac, jakie zrobic obiekty itp, to okazuje sie ze na ekranie mozna pokazac calego ebooka. Format pdf ma swoj opis, moze ten twoj tez ma?

0

Aha, i nie popedzaj na forum, to nieladnie. Sa inni, tez maja pytania, a i ludzie na forum wcale nie musza odpowiadac jesli nie chca, nie interesuje ich problem lub nie rozumieja pytania (co ma w sumie miejsce w tym przypadku).
Peace.

0

No plik ma taka strukture:

int nr;
double kreska,

struktura[],


struct struktura{
  int a;
  int a;
  int c;
  int d;
  int e;
  int f;
};

Ma byc wykorzystany do wyrysowania czegos, a kazda z tych struktur to punkt...
Wiec moje pytanie brzmi, jak to wczytac zeby mozna bylo to zrobic?

Sorry za pospieszanie.

0

Juz ktos wspominal - tworzysz sobie klase Punkt, wczytujesz jakastam liczbe bajtow, z ktorych tworzysz obiekt klasy Punkt. I tak az wczytasz wszystkie punkty, a co z nimi dalej zrobisz to juz twoja sprawa.
Brakuje ci jednak informacji o strukturze pliku - masz napisane ze zapisywana jest tablica structur, ktora ma 6 pol int - a gdzie jest zapisywana dlugosc tej tablicy? Bez tej informacji nie wczytasz tego poprawnie, chyba ze wiesz ze tablica ma zawsze ten sam wymiar.

0

Ok, a moglbys mi jeszcze podpowiedziec jak stworzyc obiekt z wczytanych bajtow?

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