long konvertálása byte tömbé

Fórumok

Sziasztok,

az lenne a problémám hogy nem tudok long típusú változót byte tömbé majd vissza konvertálni long típusra. Az interneten talált megoldások közül sajna egyik sem működött. Ha valaki tud egy működő megoldást kérem írja be ide a fórumba.

Előre is köszönöm.

Hozzászólások

tologatos bitmaskolos
long ize;
byte cucc[8];
cucc[0]=ize&0xFF;
cucc[1]=(ize>>8)&0xFF;
cucc[2]=(ize>>16)&0xFF;
cucc[3]=(ize>>24)&0xFF;
..
ize=cucc[0]+cucc[1]<<8+cucc[2]<<16+cucc[3]<<24 ..;

ilyesmi erdekel?
& nem is kell..

Esetleg:
long longVar;
...
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeLong(longVar);
byte[] longVarAsByteArray = bos.toByteArray();

Na ez az a pont, ahol mar aszondanam, hogy JNI + C. Ott egyszeruen definialnal egy byte-pointert a tombre, es joccakat.
T'om, byte order meg minden, de meg azzal egyutt is 1000x szebb, egyszerubb es gyorsabb...

Itt a megoldás, ez tökéletesen működik:

final long integer = 2345968;
byte[] byteArray = null;

//ez a számból byte tömböt csinál

ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeLong(integer);
dos.flush();
byteArray = bos.toByteArray();

// ez meg a byte tömbből vissza csinálja a számot
ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
DataInputStream in = new DataInputStream(bis);
System.out.println(in.readLong());

Jaham. Csak kozben odakonvertalaskor 3, visszakonvertalaskor 2 objektumot peldanyositottal. Nem is szolva arrol, hogy csak azert, mert valami a javalib-ben van, meg nem feltetlen korrektul van am megirva. Erdemes neha megnezni, mi is tortenik a hatterben, mert neha eleg letaglozo tud am lenni...

Tele lett a tököm ezzel, és újraírtam az egészet úgy hogy ne byte tömbökben hanem, streamek segítségével cseréljenek adatokat az objektumok. De ez sem működi. Ami az egyik objektumnak input az a másiknak output. És egyszerűen nem tudok összekapcsoli egy bemenetei és egy kimeneti streamet. A Piped streamal az a baj, hogy a pipedInputStream elejére nem tudok DataInputStreamet kötni csak PipedStreamot lehet.

Létezik ebben a nyelvben valami megoldás arra hogy az objektumok adatokat tudjanak cserélni normálisan????

Azt hogy a ByteArrayOutputStream toArray() methódusát hazsnáljam nem nyer mert az egyik objetum egy fileből olvas mondjuk 100mb-t és azt akrja a másik objektum egy másik fájlba kiírni.

Most csak fejből, nem teszteltem, de így valahogy:
PipedInputStream in = new PipedInputStream(new DataOutputStream());
PipedInputStream in = new PipedInputStream(new [akármilyen]OutputStream());
Vagy igaziból ide kéne a másik object out-ja: (vagy nem jól értem?)
PipedInputStream in = new PipedInputStream(masikObject.out);

Ennek meni kéne, És ugyanez visszafele :
PipedOutputStream out = new PipedOutputStream(new DataInputStream());
avagy:
PipedOutputStream out = new PipedOutputStream(masikObject.in);

Row

"Létezik ebben a nyelvben valami megoldás arra hogy az objektumok adatokat tudjanak cserélni normálisan????"

Persze. Pl. az adatokat berakod egy objektumba, majd az objektumra mutató referenciát átpasszolod a célnak egy metódushívással. Tulajdonképpen miért is akarsz te byte tömbökkel kommunkálni?