Goto page Previous 1, 2, 3, 4 Next
ohouapss
Guest
Wed Feb 09, 2011 11:24 pm
On 9 Lut, 21:33, "Lelek@" <n...@nndn.pl> wrote:
Quote:
Nie wiem jak to sprawdzić, bo dopiero od tygodnia to robię

Nie wiem
gdzie tam sa debugery, ktore coś pokazują
Podpowiedz mi
Na pewno są jakieś debuggery, ale wyjątek powinien polecieć na
konsolę, po odpaleniu. Nie znam się na Androidzie, w Javie pisałem
sporo, ale parę lat temu. Podobało mi się, więc nawet myślę o tym żeby
się zapoznać z Androidem.
Quote:
Co do petli for(;;

to może jej nie być. Chodzi o to, że jak długość jest 0
len=0 to nie wolno mi czytać buf[] bo aplikacja się zamyka bez powodu
Jestem zdumiony tym zachowaniem.
W ogóle jestem zdumiony, że nie ma UNSIGNED w całej tej javie i wszystko co
sie chce robić trzeba robić na wiekszych, szczególnie boli uINT że trzeba go
obrabiać w LONG i stale maskować & 0xFFFFFFFFL
Ja Ci radzę myśleć o Javie jak o czymś trochę mniej poważnym od C/C++
- pomaga:)
Ale wracając - możesz dorzucić
if(buf == NULL) poskarżsięnaekranieiwyjdź();
tuż za getBytes?
Lelek@
Guest
Wed Feb 09, 2011 11:50 pm
"Adam Dybkowski" <adybkows12@45wp.pl> wrote in message
news:iiv3lq$tqt$1@news.onet.pl...
Quote:
W dniu 2011-02-09 19:59 Lelek@ napisał(a):
Znajduje się tu wszystko, co przytoczyłeś plus dodatkowy kod na początku
do odczytania ciągu znaków z kontrolki edycyjnej. Początkowe zaalokowanie
bufora buf nie ma znaczenia bo metoda getBytes() i tak zwraca tablicę
bajtów i zmienna buf zostanie nadpisana. Prościej jest
Mam dokładnie tak jak ty masz.
Moja metoda nazywa sie
public void Button1Click(View view) {
}
I w niej to samo.co ty
W XML-u layoutu jest
android:onClick="Button1Click"
I to wszystko.
Z tym sprawdzeniem zera działa jak tego obaj oczekujemy. Wszystko gra.
Sorki ale całości ciężko by było pokazać

Wiesz jak jest
Jacek Radzikowski
Guest
Thu Feb 10, 2011 2:08 am
On 02/09/2011 01:59 PM, Lelek@ wrote:
No to chyba się wyjasniło
Quote:
public void dupa() {
byte buf[] = new byte[256];
Tutaj buf jest referencją do twojej tablicy...
Quote:
buf = FromEditText.getBytes("UTF-8");
Ale tutaj już buf jest referencją do obiektu zwróconego przez
FromEditText.getBytes(). Wskazanie do tablicy, która zaalokowałeś
zostało stracone i przydzieloną pamięcią zajmie się przy najbliższej
okazji garbage collector.
Powyższy kod jest równoważny takiej linijce:
byte buf[] = FromEditText.getBytes("UTF-8");
Ja bym twój kod przepisał do takiej postaci:
byte buf[] = FromEditText.getBytes("UTF-8");
int bfx[] = nil;
if(buf.length>0)
{
bfx[] = new int[buf.length];
for (i = 0; i < buf.length; i++)
{
//elementy buf mają po 8 bitów, więc maskowanie 0xff
//jest trochę bez sensu
bfx[i] = ((int)buf[i] & 0xFF);
}
}
if(bfx!=nil)
{
//robimy cos z bfx
}
Bardzo ważne jest alokowanie pamięci na bfx po odczytaniu zawartości
buf. Przy alokowaniu bfx o stałej długości, dopóki FromEditText.getBytes
zwróci tablicę mniej niż 256 bajtów, program będzie działał poprawnie.
Ale jeśli buf będzie dłuższe niż długość bfx, program wywali się z
błędem dostępu do pamięci przy próbie zapisu pierwszego elementu, który
się nie mieści w bfx.
BTW. próbowałeś przechwytywać wyjątki?
pzdr.
j.
Lelek@
Guest
Thu Feb 10, 2011 3:13 am
"Jacek Radzikowski" <jacek@spamer.die.die.die.piranet.org> wrote in message
news:iivdpv$o2u$1@inews.gazeta.pl...
Quote:
Ja bym twój kod przepisał do takiej postaci:
byte buf[] = FromEditText.getBytes("UTF-8");
int bfx[] = nil;
if(buf.length>0) <----------- on tego nie rozumie
dla niego ten buf nie istnieje. Trzeba go zadeklarować globalnie w funkcji
Quote:
//elementy buf mają po 8 bitów, więc maskowanie 0xff
//jest trochę bez sensu
bfx[i] = ((int)buf[i] & 0xFF);
To nie jest aż tak bez sensu, bo casting signed byte to sign integer kopiuje
8-my bit do 31-go a właściwie rozszerza np (int)0x80 -> FFFFFF80 bo signed a
nie 0x80
Jacek Radzikowski
Guest
Thu Feb 10, 2011 4:40 am
On 02/09/2011 09:13 PM, Lelek@ wrote:
Quote:
"Jacek Radzikowski" <jacek@spamer.die.die.die.piranet.org> wrote in
message news:iivdpv$o2u$1@inews.gazeta.pl...
Ja bym twój kod przepisał do takiej postaci:
byte buf[] = FromEditText.getBytes("UTF-8");
int bfx[] = nil;
if(buf.length>0) <----------- on tego nie rozumie
dla niego ten buf nie istnieje. Trzeba go zadeklarować globalnie w funkcji
Zadeklaruj buf tak, żeby był widoczny wszędzie gdzie występują odwołania
do niego. Z kodu, który zacytowałeś wynikało że buf jest deklarowany na
tym samym poziomie zagłębienia co odwołanie do FromEditText.getBytes().
A ifie brakuje jeszcze jednego warunku:
if((buf != nil ) && (buf.length>0))
Quote:
//elementy buf mają po 8 bitów, więc maskowanie 0xff
//jest trochę bez sensu
bfx[i] = ((int)buf[i] & 0xFF);
To nie jest aż tak bez sensu, bo casting signed byte to sign integer
kopiuje 8-my bit do 31-go a właściwie rozszerza np (int)0x80 -> FFFFFF80
bo signed a nie 0x80
A fakt. Zasugerowałem się typem buf i przyjąłem że bfx też jest typu byte

pzdr.
j.
Lelek@
Guest
Thu Feb 10, 2011 7:59 am
"Jacek Radzikowski" <jacek@spamer.die.die.die.piranet.org> wrote in message
news:iivmnj$f55$1@inews.gazeta.pl...
Quote:
To nie jest aż tak bez sensu, bo casting signed byte to sign integer
kopiuje 8-my bit do 31-go a właściwie rozszerza np (int)0x80 -> FFFFFF80
bo signed a nie 0x80
A fakt. Zasugerowałem się typem buf i przyjąłem że bfx też jest typu byte
Ta Java to jeden wielki shit

Jak się operuje na strumieniach danych
binarnych to w kółko trzeba konwerować to co zwracają funkcje w byte signed
do signed int ale wymaskowywać je. Idiotyzm.
Nie wiem, na razie działa z tym testem czy len jest 0 czy nie, twoich rad
nie umiem zastosować. Nie rozumiem jak mam deklarować ten sam bufor wiele
razy

Przeglądam od 10 dni już to co ludzie piszący w javie wyprawiają.
Dokładnie robia to jakby zaczynali progframować w bascomie i nie rozumieją
co czynią
Z tego co się dowiedziałem to Java powstała bo ludzie nie rozumieli
wskaźników i zapominali o zwalnianiu zaalokowanych zasobów
Jacek Radzikowski
Guest
Thu Feb 10, 2011 8:45 am
On 02/10/2011 01:59 AM, Lelek@ wrote:
Quote:
"Jacek Radzikowski" <jacek@spamer.die.die.die.piranet.org> wrote in
message news:iivmnj$f55$1@inews.gazeta.pl...
To nie jest aż tak bez sensu, bo casting signed byte to sign integer
kopiuje 8-my bit do 31-go a właściwie rozszerza np (int)0x80 -> FFFFFF80
bo signed a nie 0x80
A fakt. Zasugerowałem się typem buf i przyjąłem że bfx też jest typu
byte :)
Ta Java to jeden wielki shit

Jak się operuje na strumieniach danych
Shit bo nie umiesz się nią posłużyć. Napisałem w javie dobrych
kilkadziesiąt tysięcy linii i uważam że jest to całkiem przyjemny język.
Inne języki też znam, więc mam porównanie.
Quote:
binarnych to w kółko trzeba konwerować to co zwracają funkcje w byte
signed do signed int ale wymaskowywać je. Idiotyzm.
Nie bardzo wiem o co chodzi, ale mam wrażenie że usiłujesz zrobić coś na
około.
Quote:
Nie wiem, na razie działa z tym testem czy len jest 0 czy nie, twoich
rad nie umiem zastosować. Nie rozumiem jak mam deklarować ten sam bufor
wiele razy

Przeglądam od 10 dni już to co ludzie piszący w javie
Jak powiesz czego nie rozumiesz, to może będę mógł Ci pomóc. Na razie
widzę że walczysz z samą ideą obiektów.
Bufora nie deklarujesz kilka razy. Samą zmienna buf deklarujesz raz, w
takim miejscu żeby była widoczna ze wszystkich miejsc w których musisz
się do niej odwoływać (ale bez przesady. Najprawdopodobniej wystarczy ze
zadeklarujesz ją lokalnie w funkcji).
Buf w twoim przypadku przechowuje nie sam obiekt, a referencję do niego
(referencja działa troszkę podobnie jak wskaźniki w C, choć to nie do
końca jest to samo). Funkcja FromEditText.getBytes() sama alokuje pamięć
na tablicę zawierającą wynik i zwraca Ci wskazanie na nią. Ta referencja
jest wpisywane do zmiennej buf. Jeśli przed wywołaniem funkcji było w
niej coś innego, poprzednia wartość jest tracona, a w jej miejsce jest
wpisywana wartość zwracana przez przez getBytes. Nie następuje tam żadne
przepisywanie tablic (dlatego nie trzeba wcześniej alokować pamięci).
Wszelkie operacje jakie wykonasz na zmiennej buf po wpisaniu do niej
wartości zwróconej przez getBytes będą wykonywane nie na twojej tablicy,
a na tablicy zaalokowanej wewnątrz funkcji.
Sprawdzanie warunku buf.length jest potrzebne po to, żeby nie tworzyć
tablicy o zerowej długości (przypisanej do bfx).
Quote:
wyprawiają. Dokładnie robia to jakby zaczynali progframować w bascomie i
nie rozumieją co czynią
Może to ci, którzy przesiadają się na jave z bascoma

Ja też widziałem
dużo śmieci, ale też bardzo dużo kodu bardzo dobrej jakości.
Quote:
Z tego co się dowiedziałem to Java powstała bo ludzie nie rozumieli
wskaźników i zapominali o zwalnianiu zaalokowanych zasobów
Nie tyle zapominali, co woleli się skupić na rozwiązaniu problemu
zamiast babrać się z gospodarką pamięcią. Operując na wskaźnikach bardzo
łatwo z prostego programu stworzyć koszmarek - java stara się do tego
nie dopuścić (a przynajmniej nie przez jeżdżenie po pamięci). Mając do
dyspozycji dużo wolnego ramu, nie trzeba się martwić żeby jak
najszybciej zwolnić przydzielony a nieużywany obszar. Ręczna gospodarka
przydzielaną pamięcią w bardziej skomplikowanych projektach może
przypominać chodzenie po polu minowym. Nic dziwnego że nawet najlepszym
i najbardziej uważnym programistom zdarza się popełnić głupie błędy,
typu nie zwalnianie czegoś czy wielokrotne zwalnianie.
Mechanizm odzyskiwania nieużywaniej pamięci jest implementowany w wielu
językach wysokiego poziomu. Java jest tylko jednym z nich.
pzdr.
j.
Pszemol
Guest
Thu Feb 10, 2011 2:41 pm
"Lelek@" <nn@nndn.pl> wrote in message news:ij02dc$crn$1@opal.futuro.pl...
Quote:
"Jacek Radzikowski" <jacek@spamer.die.die.die.piranet.org> wrote in
message news:iivmnj$f55$1@inews.gazeta.pl...
To nie jest aż tak bez sensu, bo casting signed byte to sign integer
kopiuje 8-my bit do 31-go a właściwie rozszerza np (int)0x80 -> FFFFFF80
bo signed a nie 0x80
A fakt. Zasugerowałem się typem buf i przyjąłem że bfx też jest typu byte
:)
Ta Java to jeden wielki shit

Jak się operuje na strumieniach danych
binarnych to w kółko trzeba konwerować to co zwracają funkcje w byte
signed do signed int ale wymaskowywać je. Idiotyzm.
Nie wiem, na razie działa z tym testem czy len jest 0 czy nie, twoich rad
nie umiem zastosować. Nie rozumiem jak mam deklarować ten sam bufor wiele
razy

Przeglądam od 10 dni już to co ludzie piszący w javie wyprawiają.
Dokładnie robia to jakby zaczynali progframować w bascomie i nie rozumieją
co czynią
Z tego co się dowiedziałem to Java powstała bo ludzie nie rozumieli
wskaźników i zapominali o zwalnianiu zaalokowanych zasobów
Sam się śmiejesz że Java to takie C ale nie rozumiesz, że robisz
w tej Javie coś w stylu:
char data[100]="abcedefghijklmnoprstuwz";
char * buf = (char*)malloc(100);
a potem robisz coś na kształt:
buf = data;
zamiast
strcpy(buf, data);
I dziwisz się, że nie masz tam tego, co zwróciło malloc(). Pomyśl chwilkę...
Shaman
Guest
Fri Feb 11, 2011 2:01 pm
Dnia 07-02-2011 o 12:39:30 Lelek@ <nn@nndn.pl> napisał(a):
Quote:
"Shaman" <some@one.com> wrote in message news:op.vqiyljhl4limig@sioux....
Dnia 07-02-2011 o 08:26:16 Artur M. Piwko <milusi.pysiaczek@buziaczek.pl
Już wiem co jest.
Ten bufor nie istnieje jeżeli nic się tam nie wpisze i próba odczytu
buf[0] bez wcześniejszego wpisania czegoś skutkuje totalną wywałką tak
jakby wyskakiwał wyjątek nie wiadomo od czego. To jest java, a nie C++
co mnie bardzo denerwuje, szczególnie brak "unsigned" - to jest już
totalna porażka. Ta java to takie C++ dla półgłówków, którzy mieli
problem ze zrozumieniem wskaźników, struktur i wykonywania kodu
Tragedia ale nie ma wyjścia.
Wszystko jest totalną porażką jeśli się nie ma odpowiedniej wiedzy
Jedyne do czego można się przyczepić to, że kompilator Cie nie ostrzegł
przed użyciem niezainicjowanej zmiennej. No chyba, że ostrzegł, tylko
należysz do tych co instrukcje obsługi czytają dopiero jak wszystkie inne
sposoby zawiodą :)
--
PZDR
Shaman
J.F.
Guest
Fri Feb 11, 2011 2:06 pm
On Fri, 11 Feb 2011 14:01:29 +0100, Shaman wrote:
Quote:
Dnia 07-02-2011 o 12:39:30 Lelek@ <nn@nndn.pl> napisał(a):
Ta java to takie C++ dla półgłówków, którzy mieli
problem ze zrozumieniem wskaźników, struktur i wykonywania kodu
Tragedia ale nie ma wyjścia.
Wszystko jest totalną porażką jeśli się nie ma odpowiedniej wiedzy
Jedyne do czego można się przyczepić to, że kompilator Cie nie ostrzegł
przed użyciem niezainicjowanej zmiennej. No chyba, że ostrzegł, tylko
należysz do tych co instrukcje obsługi czytają dopiero jak wszystkie inne
sposoby zawiodą
Alez byla zainicjowana i to nawet dwa razy.
Co najwyzej Javie brakuje definicji funkcji ktora moze zwrocic NULL
zamiast referencji i ostrzegania jesli programista nie sprawdza tego
warunku przed odwolaniem :-)
J.
Shaman
Guest
Fri Feb 11, 2011 2:27 pm
Dnia 11-02-2011 o 14:06:52 J.F. <jfox_xnospamx@poczta.onet.pl> napisał(a):
Quote:
On Fri, 11 Feb 2011 14:01:29 +0100, Shaman wrote:
Dnia 07-02-2011 o 12:39:30 Lelek@ <nn@nndn.pl> napisał(a):
Ta java to takie C++ dla półgłówków, którzy mieli
problem ze zrozumieniem wskaźników, struktur i wykonywania kodu
Tragedia ale nie ma wyjścia.
Wszystko jest totalną porażką jeśli się nie ma odpowiedniej wiedzy
Jedyne do czego można się przyczepić to, że kompilator Cie nie ostrzegł
przed użyciem niezainicjowanej zmiennej.
Alez byla zainicjowana i to nawet dwa razy.
hmm.. jeszcze raz przejrzałem posty Lelka i nie widzę, żeby gdzieś ją
inicjował.
Zwykła Java z tego co kojarzę inicjuje takie pola jedynie w wypadku gdy są
to prywatne pola klasy. Pól deklarowanych w metodach Java nie inicjuje - w
sensie "zeruje obszaru pamięci zajmowanej przez to pole". Tak jest w
"zwykłej" javie.. nie wiem natomiast jakie cuda z tym kodem źródłowym
czynią narzędzia dla AVR. Możemy się wymądrzać a okaże się, że całe to
zamieszanie jest efektem niezamierzonym :)
--
PZDR
Shaman
J.F.
Guest
Fri Feb 11, 2011 2:39 pm
On Fri, 11 Feb 2011 14:27:13 +0100, Shaman wrote:
Quote:
Dnia 11-02-2011 o 14:06:52 J.F. <jfox_xnospamx@poczta.onet.pl> napisał(a):
Alez byla zainicjowana i to nawet dwa razy.
hmm.. jeszcze raz przejrzałem posty Lelka i nie widzę, żeby gdzieś ją
inicjował.
byte buf[] = new byte[256];
buf = FromEditText.getBytes("UTF-8");
Quote:
Zwykła Java z tego co kojarzę inicjuje takie pola jedynie w wypadku gdy są
to prywatne pola klasy. Pól deklarowanych w metodach Java nie inicjuje - w
sensie "zeruje obszaru pamięci zajmowanej przez to pole". Tak jest w
"zwykłej" javie.. nie wiem natomiast jakie cuda z tym kodem źródłowym
czynią narzędzia dla AVR.
AVR ?
No dobra - buf zainicjowal dwa razy, zawartosc tablicy tylko raz.
Akurat niezainicjowana zawartosc tablicy nie powinna tu bruzdzic ..
chyba ze jakas kontrola przed nieuprawnionym czytaniem pamieci.
J.
Shaman
Guest
Fri Feb 11, 2011 3:04 pm
Dnia 11-02-2011 o 14:39:08 J.F. <jfox_xnospamx@poczta.onet.pl> napisał(a):
Quote:
On Fri, 11 Feb 2011 14:27:13 +0100, Shaman wrote:
Dnia 11-02-2011 o 14:06:52 J.F. <jfox_xnospamx@poczta.onet.pl
napisał(a):
Alez byla zainicjowana i to nawet dwa razy.
hmm.. jeszcze raz przejrzałem posty Lelka i nie widzę, żeby gdzieś ją
inicjował.
byte buf[] = new byte[256];
buf = FromEditText.getBytes("UTF-8");
Zwykła Java z tego co kojarzę inicjuje takie pola jedynie w wypadku gdy
są
to prywatne pola klasy. Pól deklarowanych w metodach Java nie inicjuje
- w
sensie "zeruje obszaru pamięci zajmowanej przez to pole". Tak jest w
"zwykłej" javie.. nie wiem natomiast jakie cuda z tym kodem źródłowym
czynią narzędzia dla AVR.
AVR ?
haha.. ostatnio dużo czytam o AVR i zamiast Android zobaczyłem Arduino :)
Quote:
No dobra - buf zainicjowal dwa razy, zawartosc tablicy tylko raz.
Akurat niezainicjowana zawartosc tablicy nie powinna tu bruzdzic ..
chyba ze jakas kontrola przed nieuprawnionym czytaniem pamieci.
Sięgnąłem po książkę "Thinking in Java" - a nie robiłem tego od wielu
miesięcy
Kurcze sprawa wydaje się jeszcze dziwniejsza, bo faktycznie wywołanie
byte buf[] = new byte[256]; powinno zainicjować i wyzerować tablicę.
No ale książka traktuje o referencyjnej Javie Sun'a. Widać Google dla
swojej maszyny wirtualnej po swojemu optymalizuje bajtkod. To jest dla
mnie jedyne wytłumaczenie.
--
PZDR
Shaman
MoonWolf
Guest
Fri Feb 11, 2011 3:22 pm
Shaman denied rebel lies:
Quote:
Akurat niezainicjowana zawartosc tablicy nie powinna tu bruzdzic ..
chyba ze jakas kontrola przed nieuprawnionym czytaniem pamieci.
Sięgnąłem po książkę "Thinking in Java" - a nie robiłem tego od wielu
miesięcy
Kurcze sprawa wydaje się jeszcze dziwniejsza, bo faktycznie wywołanie
byte buf[] = new byte[256]; powinno zainicjować i wyzerować tablicę.
No ale książka traktuje o referencyjnej Javie Sun'a. Widać Google dla
swojej maszyny wirtualnej po swojemu optymalizuje bajtkod. To jest
dla mnie jedyne wytłumaczenie.
Czekaj bo się już zgubiłem w tym wątku. Wydaewało mi się że tutaj:
<iiup2o$em2$1@opal.futuro.pl> Lelek sobie sam odpowiedział na swoje
pytanie dlaczego mu się wywala?
--
<:> Roger, MoonWolf Out <:>|Don't you leave me Father Time
(:

(:

|
(

JID:moonwolf@jabberpl.org(

|
http://karakkhaz.prv.pl
J.F.
Guest
Fri Feb 11, 2011 3:32 pm
On Fri, 11 Feb 2011 15:04:03 +0100, Shaman wrote:
Quote:
Dnia 11-02-2011 o 14:39:08 J.F. <jfox_xnospamx@poczta.onet.pl> napisał(a):
byte buf[] = new byte[256];
buf = FromEditText.getBytes("UTF-8");
Sięgnąłem po książkę "Thinking in Java" - a nie robiłem tego od wielu
miesięcy
Kurcze sprawa wydaje się jeszcze dziwniejsza, bo faktycznie wywołanie
byte buf[] = new byte[256]; powinno zainicjować i wyzerować tablicę.
No ale książka traktuje o referencyjnej Javie Sun'a. Widać Google dla
swojej maszyny wirtualnej po swojemu optymalizuje bajtkod. To jest dla
mnie jedyne wytłumaczenie.
Nie widziales tlumaczenia ?
Druga linia wywala pierwsza inicjacje, a wstawia do obiektu
zaalokowanego i zwroconego przez metode.
W tym przypadku pewnie zwrocilo null i stad caly jest ambaras.
A tak swoja droga - to co potem zwraca .length od null ?
zero czy juz wyjatek ?
J.
Goto page Previous 1, 2, 3, 4 Next