How can i convert java.lang.Object to byte[]

Discussion in 'Java' started by Neena, Sep 28, 2005.

  1. Neena

    Neena Guest

    Hi,

    How can i convert java.lang.Object to byte[].
    cant cast directly. throws ClassCastException.

    Regards

    Neena
     
    Neena, Sep 28, 2005
    #1
    1. Advertising

  2. Neena wrote:

    > How can i convert java.lang.Object to byte[].


    Serialise it.
     
    Andrew Thompson, Sep 28, 2005
    #2
    1. Advertising

  3. Neena

    megagurka Guest

    Neena skrev:
    > How can i convert java.lang.Object to byte[].
    > cant cast directly. throws ClassCastException.


    First of all, why do you want to convert an object into a byte[]?
    Second, there are an infinite number of formats for storing an object
    in a byte[]. Which format do you want? If you don't care, you can
    probably use the Java serialization mechanism, see
    java.io.Serializable, java.io_ObjectOutputStream and
    java.io.ByteArrayOutputStream for more information.

    /JN
     
    megagurka, Sep 28, 2005
    #3
  4. Neena

    Roedy Green Guest

    On 28 Sep 2005 02:55:11 -0700, "Neena" <>
    wrote or quoted :

    >
    >How can i convert java.lang.Object to byte[].
    >cant cast directly. throws ClassCastException.

    If the backing object is not REALLY a byte[] already then it is
    impossible. An Object just has a few fields. You are asking the
    machine to create a silk purse out of a sow's ear.

    See http://mindprod.com/gotchas.html#ARRAY
    --
    Canadian Mind Products, Roedy Green.
    http://mindprod.com Again taking new Java programming contracts.
     
    Roedy Green, Sep 28, 2005
    #4
  5. Neena

    Roedy Green Guest

    On 28 Sep 2005 02:55:11 -0700, "Neena" <>
    wrote or quoted :

    >How can i convert java.lang.Object to byte[].
    >cant cast directly. throws ClassCastException.


    If what you are trying to do is flatten an object for transport, then
    you need to serialise it. See http://mindprod.com/applets/fileio.html
    for how to write a serialized object into a byte array.

    See http://mindprod.com/jgloss/serialization.html

    Could we see your surrounding code to understand the context of your
    question?
    --
    Canadian Mind Products, Roedy Green.
    http://mindprod.com Again taking new Java programming contracts.
     
    Roedy Green, Sep 28, 2005
    #5
  6. Neena

    Roedy Green Guest

    On 28 Sep 2005 02:55:11 -0700, "Neena" <>
    wrote or quoted :

    >
    >How can i convert java.lang.Object to byte[].
    >cant cast directly. throws ClassCastException.


    there is yet another way to interpret your question, how do I write
    the fields of a Object (subclass of object really) in binary to a byte
    array. For that you can use a DataOutputStream and a ByteArrayStream.
    See http://mindprod.com/applets/fileio.html for how to hook them up.
    --
    Canadian Mind Products, Roedy Green.
    http://mindprod.com Again taking new Java programming contracts.
     
    Roedy Green, Sep 28, 2005
    #6
  7. Neena

    Neena Guest

    I just wanted to pass abytearray to my JNI native code. i will have a
    long, string or Calendar objects.
    used the following method to create byte[]:

    ByteArrayOutputStream bStream = new ByteArrayOutputStream();
    ObjectOutputStream oStream = new ObjectOutputStream( bStream );
    oStream.writeObject ( obj );
    byte[] byteVal = bStream. toByteArray();

    thanks alot...
     
    Neena, Sep 29, 2005
    #7
  8. Neena

    Roedy Green Guest

    On 29 Sep 2005 04:53:33 -0700, "Neena" <>
    wrote or quoted :

    >I just wanted to pass abytearray to my JNI native code. i will have a
    >long, string or Calendar objects.
    > used the following method to create byte[]:


    Perhaps you are trying to create something that looks like a C struct
    in memory. Then once C has the address of it, it can go to town
    without fooling around with JNI field by field access?

    If that is true, if you are on a little-endian machine you can use
    LEDatastream see http://mindprod.com/products1.html#LEDATASTREAM

    Write to a byte array by combining it with a ByteArrayOutputStream.
    See http://mindprod.com/applets/fileio.html for details. Tell it you
    have little-endian binary data and want to write to a byte array.
    For character data, write native platform-encoded bytes, null
    terminated in fixed length fields.

    If you don't have to worry about compatibility with older JVMs, you
    can use nio instead of LEDataStream.

    If your machine is big-endian, just tell the file i/o amanuensis you
    have big endian binary data instead.

    Similarly when you return, you can take the C struct apart again to
    get the value in the fields using LEDataInputStream.

    This technique should be very fast on the C side, with a fairly heavy
    set up cost. The slightly ugly thing about it is if you implement it
    on a variety of platforms, on the Java side you need a big and little
    endian version, and if there are padding/alignment bytes in the C
    struct, they too may be platform dependent. With normal JNI the Java
    side is identical for all platforms. Only the C side changes.



    --
    Canadian Mind Products, Roedy Green.
    http://mindprod.com Again taking new Java programming contracts.
     
    Roedy Green, Sep 29, 2005
    #8
  9. Neena

    Neena Guest

    thanks alot..
    i am going to give it a try...:))
     
    Neena, Sep 30, 2005
    #9
  10. Neena

    vakhouri

    Joined:
    Jul 28, 2007
    Messages:
    1
    Thanks For the reply Neena, it was of great help..
     
    vakhouri, Jul 28, 2007
    #10
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page