Serializacja obiektu do strumienia Socketa

0

Serializuję (XMLowo ale może też być zwykła serializacja) obiekt (ArrayList) do strumienia Socketa (połączenia) aby odebrała go aplikacja klienta przez interent. Polecenie wysyłające: encoder.writeObject(Object.obj) i potem encoder.flush() działają ładnie. Problem jest z kodem odbierającym. XMLDecoder po drugiej stronie połączenia chyba nie wie kiedy kończy się przeznaczona dla niego transmisja obiektu ArrayList i blokuje się na poleceniu "readObject()" czekajac na dalsze bajty. Jak to rozwiązać nie zamykając połączenia?
Z góry dzięki.

0

Na pewno czekasz na dalszy kawałek obiektu ArrayList, a nie na zakończenie strumienia? flush() nie wygeneruje znaczniku zamykającego </java>, który wygeneruje dopiero close(). Pokaż proszę, w jaki sposób odczytujesz te dane.

0

Tak. właśnie się zorientowałem że flush() czegoś nie dopisuje do zserializowanego obiektu i stąd ten błąd. Dzięki za informacje o znaczniku <java>. Gdzie to znalazłeś ? Bo ja przewaliłem trochę źródeł i dokumentacji i nie jakoś się nie natknąłem na to. Nie chciałem wykorzystywać "close()" bo to powoduje zamkniecie strumienia a w przypadku socketu jest to zamkniecie połączenia. A nie chce zamykać sesji po wysłaniu jednego obiektu mam trochę więcej danych do wysłania (sekwencyjnie co jakiś czas). Otwieranie drugiego połączenia nie wchodzi w grę. Muszę to jakoś obejść i mam już pewna próbę za sobą. Serializuję strumień encodera do ArrayByteOutputStream, zamykam a potem wysyłam do Socketa zawartość tablicy byte[]. Tam sczytuję przez XMLdecoder. Działa i tworzy obiekt po deserializacji. Obiekt można używać tylko w czasie samej deserializacji dostaje w panelu czerwone ostrzeżenie. Nie jest to Exception i nie przerywa procesu . brzmi to tak SAXParseException: Content is not allowed in trailing section.

0

Nie znalazłem, sprawdziłem jak działa ;) Ale to dość logiczne, flush() nie powinien wysyłać </java> bo po flush() dalej możesz pisać do enkodera. Błąd jaki dostałeś sugeruje, że coś jest nie tak z przesyłanym XMLem.

0

Dzięki za informacje : )

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