Solved

Convert Vector to Byte[]

Posted on 2004-03-31
17
2,245 Views
Last Modified: 2008-02-01
How would I convert a Vector to a Byte[].

I can see that Vector implements the Serializable interface, but since a Vector can hold any object, which may or may not be serializable, is a Vector really Serializable?
0
Comment
Question by:Moroni24
  • 8
  • 4
  • 2
  • +1
17 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 10725946
You're right that its contents have also to be Serializable. What do you want to do? Do you really mean Byte[]?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10725985
If so, you can do this sort of thing:


            Vector v = new Vector();
            for(int i = 0;i < 10;i++) {
                  Byte b = new Byte((byte)i);
                  v.add(b);
            }
            Byte[] bytes = (Byte[])v.toArray(new Byte[10]);
            System.out.println(bytes);
0
 
LVL 2

Author Comment

by:Moroni24
ID: 10726031
What I have is a vector of ByteArrayOutputStreams
  These streams themsevles are compressed jms.TestMessages
Now I want to take the whole thing and convert it to a Byte array so I can assign it to a jms.BytesMessage.

I could also use an jms.ObjectMessagem but then I still have the same question. Is the vector going to be serializable.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 86

Expert Comment

by:CEHJ
ID: 10726073
When you take the wrapped byte arrays out of the streams it'll be Serializable, yes. It's just the streams that aren't
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10726110
Do something like:


            ByteArrayOutputStream master = new ByteArrayOutputStream();
            for(int i = 0;i < streamsVector.size();i++) {
                  ByteArrayOutputStream wrappedBytes = (ByteArrayOutputStream)streamsVector.get(i);
                  master.write(wrappedBytes.toByteArray());
            }
            byte[] allBytes = master.toByteArray();
            // now serialize 'allBytes'
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10726123
That's assuming concatenation - you may not want to concatenate
0
 
LVL 2

Author Comment

by:Moroni24
ID: 10726148
So serializing the streams is not possible then. Which means I won't be able to serialize the vector.

Am I understanding you correctly?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10726173
You serialize what's in the streams, i.e. the byte arrays, not the streams themselves. Take my last code, you could then do


         byte[] allBytes = master.toByteArray();
         Vector v = new Vector();
         v.add(allBytes); // now serailize 'v'
0
 
LVL 2

Author Comment

by:Moroni24
ID: 10726663
I didn't think you would be able to add a byte[] to a vector since it's not an object.

I'll give it a shot
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 250 total points
ID: 10727000
It is an object i assure you ;-)
0
 
LVL 92

Expert Comment

by:objects
ID: 10727098
> What I have is a vector of ByteArrayOutputStreams

Question is if are looking to create a message from your Vector, then why does it contain streams.
Better off instead having it contain the bytes for the message in the first place or converting them:

Vector bytes = new Vector();
for(int i = 0;i < streamsVector.size();i++)
{
      ByteArrayOutputStream byteStream = (ByteArrayOutputStream)streamsVector.get(i);
      bytes.add(byteStream.toByteArray());
}

You can then serialize your vector.
0
 
LVL 9

Expert Comment

by:mmuruganandam
ID: 10731526
Vector object = new Vector();

// add few objects to vector

ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream outStream = new ObjectOutputStream(out);
outStream.writeObject(object);

byte[] data = out.toByteArray();


If any of the object that is in the vector is not serialiable, then it will throw the NotSerialableException.


Regards,
Muruga
0
 
LVL 9

Expert Comment

by:mmuruganandam
ID: 10897644
No objections...
0
 
LVL 2

Author Comment

by:Moroni24
ID: 10918454
opps... forgot this was still here... thanks for the reminder
0
 
LVL 92

Expert Comment

by:objects
ID: 10923008
Did my suggestion about how to serialize your Vector help you?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 10927747
8-)
0

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
In this post we will learn different types of Android Layout and some basics of an Android App.
Viewers learn about the scanner class in this video and are introduced to receiving user input for their programs. Additionally, objects, conditional statements, and loops are used to help reinforce the concepts. Introduce Scanner class: Importing…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question