We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you two Citrix podcasts. Learn about 2020 trends and get answers to your biggest Citrix questions!Listen Now

x

Getting bytes from the bytes array

harmeek_80
harmeek_80 asked
on
Medium Priority
228 Views
Last Modified: 2010-03-31
Hi Friends,
I receive data from the server and I store it in a bytes array.Now I need to retrieve bytes from the array,like first byte says code[1 byte],second says lastname[4 bytes],third says fname[30 bytes],last byte says if there is one more entry,and the same syntax needs to be followed again....I tried this but its not working...any help would be appreciated.


import java.io.*;
import java.nio.*;
 
public class btest{
public static void main(String[] ar){
 try{
 
                String data1 ="1232 3 3 444 222 111 444 555555 2222222 1111111 3333 dssssddd";
                byte[] data = data1.getBytes("ASCII");
            int length = data.length;
            System.out.println("length is:"+length);
            ByteBuffer buff = ByteBuffer.wrap(data);
 
            byte[] fbyte = new byte[1];
            byte[] lname = new byte[4];
            byte[] fname = new byte[30];
            byte[] lbyte = new byte[1];
            
            buff.get(fbyte, 0,1);
            String received0 = new String(fbyte,"ASCII");
                System.out.println("Data Recd: " + received0);
            buff.position(1);
            
            buff.get(ref_no, 1,4);            
            String received1 = new String(lname,"ASCII");
            buff.position(4);
 
            buff.get(uname, 4,34);
              String received2 = new String(fname,"ASCII");
                System.out.println("Data Recd: " + received2);
            buff.position(34);
 
            buff.get(lbyte, 34,35);
            String received3 = new String(lbyte,"ASCII");
                System.out.println("Data Recd: " + received3);
 
}catch(Exception e){e.printStackTrace();}
 
}
}

Comment
Watch Question

CERTIFIED EXPERT
Top Expert 2016

Commented:
You don't need to move anything or calculation positions - the BB will do that for you

buff.get(fbyte);
String received0 = new String(fbyte,"ASCII");
System.out.println("Data Recd: " + received0);

buff.get(ref_no);


etc.
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
>           buff.get(ref_no, 1,4);          

your problem is that those values refer to where in ref_no to place the bytes :)

What you want can also easily be done without even needing to create a ByteBuffer, and use Syste.arraycopy to copy the bytes directly from the byte array
CERTIFIED EXPERT
Top Expert 2016
Commented:
It's actually easier to do it with a BB - it's been designed especially for this sort of thing

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
Java Developer
CERTIFIED EXPERT
Top Expert 2010
Commented:
you also need to remove those calls to position (they are relative gets) and do it in a loop
there are a variety of other minor prob also with the code
try something like:

boolean done = false;
while (!done) {
          buff.get(fbyte);
          String received0 = new String(fbyte,"ASCII");
          System.out.println("Data Recd: " + received0);
         
          buff.get(fname);
          String received1 = new String(fname,"ASCII");
          System.out.println("Data Recd: " + recieved1);
 
          buff.get(lname);
          String received2 = new String(lname,"ASCII");
          System.out.println("Data Recd: " + recieved2);

          buff.get(lbyte);
          String received3 = new String(lbyte,"ASCII");
          System.out.println("Data Recd: " + received3);
          done = !recieved3.equals(MORE_DATA);
}
CERTIFIED EXPERT
Top Expert 2016

Commented:
Not sure how that answer added anything to the one i'd already given, although it did repeat it
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.