• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czytanie bajtów pliku.

Object Storage Arubacloud
0 głosów
879 wizyt
pytanie zadane 21 maja 2017 w Java przez Koko$ Użytkownik (740 p.)
Witam, piszę projekt w którym muszę wczytać bajty pliku, przeszukać je by znaleźć pewien podany przez usera ciąg bajtów a następnie je zamienić na drugi podany ciąg bajtów.

Czytam bajty pliku takim sposobem:

        Path path = Paths.get("path\to\file");
        byte[] table = Files.readAllBytes(path);
        for(byte b : table)
            System.out.print(b + " ");

I na wyjściu dostaje: -1 -40 -1 -32 0 16 74 70 73 70 0 1 1 1 0 96 0 96 0 0 -1 -37 0 67 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -37 0 67 ...

Jakie jest tutaj zastosowane kodowanie? Chcę aby user podawał ciąg składający się tylko z zer i jedynek a tutaj jak widać nie jest zastosowany NKB.

Pracuje na Windowsie(jeśli to ma jakiekolwiek znaczenie).

pozdrawiam, Kokos
1
komentarz 22 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Tu nie masz zastosowanego żadnego kodowania. Bajty to są liczby zapisane na 8 bitach. W Jave bajty reprezentujac wartosc liczbową od -128 do 127. Gdy je wypisujesz to poprostu dostajesz wartość bajtów w dziesiętnej postaci
komentarz 22 maja 2017 przez Koko$ Użytkownik (740 p.)
Super, dzięki. Masz jakiś pomysł jak dobrać się do 0/1 lub jak zmienić input usera na tą wartość? Szukałem troche na stack'u ale nic sensownego nie mogę znaleźć.
1
komentarz 22 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
A dlaczego chcesz się dobrać do 0/1? jeśli masz zamieniać bajty to pracuj na bajtach.

Ale jak coś to mam kilka pomysłów jak się dobrać.
komentarz 22 maja 2017 przez Koko$ Użytkownik (740 p.)
Bo tak sobie myślę że jeśli user poda mi ten ciąg bajtów to muszę go jakoś zmienić na bajty i je porównywać. Albo liczby na 0/1 albo 0/1 na liczby ;p
1
komentarz 22 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Masz typ byte albo klase Byte które odpowiadą bajtowi. Wiec zwykłę ==/equals() bedzie dobrym porównaniem .
komentarz 22 maja 2017 przez Koko$ Użytkownik (740 p.)
Spróbowałem takiego czegoś:

        Path path = Paths.get("path\to\file");
        byte[] table = Files.readAllBytes(path);
        for(byte b : table)
        {
           // System.out.println(Integer.toBinaryString(b));
            if("111100" == Integer.toBinaryString(b))
            {
                System.out.println("test");
            }
        }

"111100" występuje w tym pliku ale nie nie weszło do ifa z sysoutem test
1
komentarz 22 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Mylisz bity z bajtami. jeśli chcesz w taki sposób porównywać to możesz wpisać 0b111100 wtedy utworzy ci się integer o wartosci reprezentowanej przez 111100.

Stringów nie powinno porównywać się używająć ==

A w jaki sposób 111100 wystepuje w pliku?
komentarz 22 maja 2017 przez Koko$ Użytkownik (740 p.)
Jesli odkomentuje  System.out.println(Integer.toBinaryString(b)); to wypisuje mi po prostu bajty z tablicy jako stringi które binarnie reprezentują bajty pliku i między innymi wypisało mi 111100(myślę że po prostu pomija starsze zera i dlatego ma tylko 6 bitów).

Integer.toBinaryString() zwraca stringa.

        byte[] table = Files.readAllBytes(path);
        for(byte b : table)
        {
           // System.out.println(Integer.toBinaryString(b));
            if(Integer.toBinaryString((int)b).equals("111100"))
            {
                System.out.println("test");
            }
        }

Takie brzydkie castowanie ale zadziałało. Moim błędem było to, że podawałem byte zamiast int'a do funkcji Integer.toBinaryString().

Dzięki wielkie za pomoc :D

1 odpowiedź

0 głosów
odpowiedź 21 maja 2017 przez Wiciorny Ekspert (269,710 p.)

A co znajduje się w pliku, liczby które są "ujemne" to raczej śmieci wczytane w tablice, pytanie co zostaje wczytane?

Może skorzystaj z klasy 

java.io.BufferedReader;

 

komentarz 21 maja 2017 przez Koko$ Użytkownik (740 p.)
a on nie jest do czytania pliku? W sensie np .txt?
komentarz 23 maja 2017 przez Wiciorny Ekspert (269,710 p.)
zwracam honor, jest.

Podobne pytania

+2 głosów
3 odpowiedzi 3,215 wizyt
pytanie zadane 1 sierpnia 2017 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 132 wizyt
pytanie zadane 1 października 2020 w Egzaminy zawodowe przez lewur Początkujący (470 p.)
0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 27 lutego 2019 w C i C++ przez niezalogowany

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...