Zápis serializovaných objektov priamym zápisom bajtov do streamu – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zápis serializovaných objektov priamym zápisom bajtov do streamu – Java – Fórum – Programujte.comZápis serializovaných objektov priamym zápisom bajtov do streamu – Java – Fórum – Programujte.com

 

Prog.0
Věrný člen
2. 3. 2010   #1
-
0
-

Ahojte, mám ďalšiu otázku.

V PHP chcem vypisovať stringy na výstup tak, aby si java aplikácia tieto stringy vedela čítať ako polia bajtov[]. (v PHP je string to isté čo v jave byte[]).

Potrebujem na to poznať spôsob zápisu serializovaných objektov. Vie mi niekto poradiť, kde sa dočítam, ako majú vyzerať?

Stačí mi vedieť vypisovať iba iba serializované polia bajtov (byte[]).

V java aplikácii mám potom inputstream, z ktorého chcem tieto stringy/polia bajtov čítať takto:

  public static void read() {

byte[] data;
try {

ObjectInputStream ois = new ObjectInputStream(...);
while (true) {
data = (byte[]) ois.readObject();
// spracovanie dat
}
} catch (EOFException ex) {
System.out.println("všetko.");
} catch (Exception ex) {
ex.printStackTrace();
}
}

Zapísať takéto dáta v jave je triviálne, no ja to potrebujem spraviť v php. V jave by to vyzeralo asi takto:
  public static void write() {

byte[] data1 = ...;
byte[] data2 = ...;

try {
ObjectOutputStream oos = new ObjectOutputStream(...);
oos.writeObject(data1);
oos.writeObject(data2);
...
oos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
liborb
~ Redaktor
+18
Guru
3. 3. 2010   #2
-
0
-

Možná to špatně chápu. PHP ti poběží na serveru, aplikace v Javě na klientovi .... a jak že je chceš propojit?

Nahlásit jako SPAM
IP: 85.207.166.–
Prog.0
Věrný člen
3. 3. 2010   #3
-
0
-

Ano, PHP ako modul na Apache HTTP serveri, aplikácia (java) HTTP requestom o tieto dáta požiada a práve v HTTP odpovedi ich chcem streamovať.

Ale už som prišiel na jednoduchší spôsob, ako je napodobňovanie java serializácie.

Budem odosielať tie reťazce za sebou, s tým že pred každým pošlem 4 bajty, do ktorých zakódujem dĺžku reťazca. Tak ich budem vedieť v jave krájať a spracovávať už počas sťahovania, rovnako ako keby spom použil ObjectInputStream.readObject(); V jave to bude kapik komplikovanejšie ale podstatne jednoduchšie na strane PHP.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
liborb
~ Redaktor
+18
Guru
4. 3. 2010   #4
-
0
-

Problém datové výměny má jedno velké úskalí, a to rozšiřitelnost. Pokud ti u těch řetězců nezáleží na pořadí, velikosti a počtu, tak je to asi jedno a tvoje řešení bude vyhovující. Ve chvíli, kdy bys požadoval další data tj. měnil formát, tak neustále předěláváš obě aplikace atd. atd. Možná by stálo za to zamyslet se, jestli by nebylo lepší využít k přenosu dat XML.

Nahlásit jako SPAM
IP: 85.207.166.–
Prog.0
Věrný člen
4. 3. 2010   #5
-
0
-

Máš pravdu, práve z pohľadu rozšíriteľnosti som sa chcel vyhnúť problémom, tak som to vyriešil tak, že server dátam vôbec nemusí rozumieť. Iba ich pasívne prijíma a odosiela. Jediné čo robí je overenie podpisu a dešifrovanie pred prijatím a podpísovanie a zašifrovanie pred odoslaním.
Tieto dáta sú pritom serializované a gzipované java objekty, ktoré si klientské aplikácie prostredníctvom servera vymieňajú. Pri uploade posiela klient len jeden (svoj) balík dát, no prijíma všetky nové od ostatných klientov. A práve pri prijatí som potreboval, aby som ich vedel z jedného streamu, ktorý prijímam zo servera, nejako vyťahovať už počas loadingu. Prvé čo ma napadlo, bol práve ten ObjectInputStream, no na to by som ich musel veďieť v PHP zapísať "javovskou serializáciou", čo mi prišlo dosť komplikované. Myslím že to riešenie, že najprv odošlem dĺžku a potom samotné dáta bude fajn.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 40 hostů

Podobná vlákna

Mysql problém so zápisom — založil Majox

Iterovani ve streamu — založil Jakoby

Img ze streamu a Img do streamu — založil Mutagen

Adresy streamů na bbc — založil Návštěvník

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý