[Biojava-l] Error while reading byte data for creating a Trace.

Andrew Walsh walsh at andrew.cmu.edu
Tue Nov 6 12:23:36 EST 2007


You also appear to be losing every other line with the following code:

    while(in.readLine()!=null)
        {
            str += in.readLine();
        }

Every time the while statement checks its condition, a line is read from 
the inputstream.  That line is never stored.  Then, if the condition is 
met, another line is read and that line is added to your String.

-Andy

abhinav wrote:
> Richard Holland wrote:
>   
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> I think that either the file is at fault, or the method you are using to
>> read the file into Java is at fault.
>>
>> Could you provide us with the complete piece of code you are using from
>> the point where you read the file into the array through to the point
>> where you generate the output you quoted?  (Not as an attachment as the
>> mailing list will strip those - simply paste it into the message body
>> instead).
>>
>> cheers,
>> Richard
>>
>>
>> abhinav wrote:
>>   
>>     
>>> Richard Holland wrote:
>>> I suspect the byte array itself may contain inaccurate data.
>>>
>>> Internally, both the URL and File constructors read the data into a byte
>>> array and then pass it to the same method as is used by the byte[]
>>> constructor.
>>>
>>> So, something must be different between the byte array you have, and the
>>> byte array obtained by reading the file in.
>>>
>>> The File constructor uses the following code to read the file:
>>>
>>>     byte[] bytes = null;
>>>     ByteArrayOutputStream baos = new ByteArrayOutputStream();
>>>     FileInputStream fis = new FileInputStream(ABIFile);
>>>     BufferedInputStream bis = new BufferedInputStream(fis);
>>>     int b;
>>>     while ((b = bis.read()) >= 0)
>>>     {
>>>       baos.write(b);
>>>     }
>>>     bis.close(); fis.close(); baos.close();
>>>     bytes = baos.toByteArray();
>>>
>>> If the above code produces different results to your byte array when
>>> reading data from the same file as your code, then something has gone
>>> wrong with the construction of your byte array.
>>>
>>> Lastly, a full stack trace would help us pinpoint the line that is
>>> breaking, and hopefully provide a hint as to what is wrong with the
>>> contents of the byte array. If you could provide one that would be very
>>> helpful.
>>>
>>> cheers,
>>> Richard
>>>
>>>
>>> abhi232 at cc.gatech.edu wrote:
>>>   
>>>     
>>>       
>>>>>> Hi all,
>>>>>> I am having a byte array which is having the data from an .ab1 file.The
>>>>>> biojava library provides a class called as ABITrace which takes as input
>>>>>> either a byte[] array , a file or a url.If i use the later parameters (the
>>>>>> file or the url )the program works but if I pass the byte array to the
>>>>>> constructor I get java.lang.arrayIndexOutOfBound.Exception.Is there a
>>>>>> problem with the ABITrace class or how can I bypass this particular error.
>>>>>> I am printing the length of the byte array and it comes to 144930...Can
>>>>>> that cause a problem in my code?
>>>>>>
>>>>>> Thanks in advance.
>>>>>> Abhinav
>>>>>> _______________________________________________
>>>>>> Biojava-l mailing list  -  Biojava-l at lists.open-bio.org
>>>>>> http://lists.open-bio.org/mailman/listinfo/biojava-l
>>>>>>
>>>>>>     
>>>>>>           
>>>>>>             
>>   
>>     
>>> Yes I looked at the file ABITrace and found out that the first three
>>> characters must be ABI or the 128-130 characters must be ABI.But I
>>> cannot find that in the file that I am having.Also If this is not the
>>> case then there should be an illegal format exception whereas I am
>>> arrayIndexOutOfBound Exception which is also weird.
>>> I am getting the following stack trace.
>>> The bytes that i want are:0
>>> The bytes that i want are:11
>>> The bytes that i want are:0
>>> The size of the byte array generated is:144930
>>> Byte array also recieved
>>> java.lang.ArrayIndexOutOfBoundsException: 128
>>>     at org.biojava.bio.program.abi.ABITrace.isABI(ABITrace.java:552)
>>>     at org.biojava.bio.program.abi.ABITrace.initData(ABITrace.java:289)
>>>     at org.biojava.bio.program.abi.ABITrace.<init>(ABITrace.java:136)
>>>     at Trace.init(Trace.java:138)
>>>     at sun.applet.AppletPanel.run(Unknown Source)
>>>     at java.lang.Thread.run(Unknown Source)
>>> The bytes I want are the first three bytes that I want to check if my
>>> file is ABI or not.I checked the isABI function as well it returns true
>>> or false value and not arrayIndexOutOfBouond . Also the number 128 does
>>> it hve any significance in this case?
>>> Thanks in advance
>>> Abhinav
>>>     
>>>       
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.2.2 (GNU/Linux)
>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
>>
>> iD8DBQFHMJwi4C5LeMEKA/QRAhAOAJ0ZjIWk1CXSLYlU2CUCp7xodAfFeACgjtFG
>> T1Z8W0JhCe7+hx5rbKLGqVk=
>> =qNcr
>> -----END PGP SIGNATURE-----
>>   
>>     
> Ok Yes here is the code that i am using .I establish a connection with a 
> php page which in turn reads the file and prints the content back to 
> me.I am using DataOutputStream for sending data and BufferedReader for 
> taking in the data.Then I am reading the data into a string and 
> converting it to byte[] array . this the code where the connection is 
> estableshed and the data is taken and displayed.
>
>
>
>  private HttpURLConnection httpConn;
>     private DataOutputStream out;
>     private DataInputStream temp_stream;
>     private BufferedReader in;
>     private BufferedInputStream in_buff_stream;
>     private String str ;
>     private byte[] bytearray;
>     Chromatogram abif_chromatogram;
>
>     /** Creates a new instance of testPost */
>     public testPost()
>     {
>
>         httpConn = null;
>         str = new String("");
>         bytearray = new byte[144930];
>
>     }
>     public byte[] create_and_write_Connection(String url,String 
> data_request)
>     {
>         try
>         {
>             URL conn_url = new URL(url);
>             httpConn = (HttpURLConnection)conn_url.openConnection();
>             httpConn.setDoOutput(true);
>             httpConn.setDoInput(true);
>             httpConn.setRequestMethod("POST");
>             out=new DataOutputStream(httpConn.getOutputStream());
>             out.writeBytes(data_request);
>             out.flush();
>             System.out.println("Connection established successfully and 
> data written");
>             InputStreamReader in_stream = new 
> InputStreamReader(httpConn.getInputStream());
>
>                 System.out.println("The character encoding used is:"+ 
> in_stream.getEncoding());
>             in = new BufferedReader(in_stream);
>
>
>             System.out.println("Data acceptance started");
>
>
>             while(in.readLine()!=null)
>             {
>                 str += in.readLine();
>             }
>             System.out.println("The string to be returned is:"+str);
>             bytearray = str.getBytes("ISO8859-1");
>             String temp_string = new String(bytearray,"windows-1252");
>            System.out.println("The encoded string is as follows:"+ 
> temp_string);
>             System.out.println("The size of byte array inside testpost 
> is:"+ Array.getLength(bytearray));
>              for(int i = 0 ; i < 3 ; i ++)
>                 System.out.println("The bytes that i want are:"+ 
> bytearray[i]);
>             return bytearray;
>         }
>         catch(Exception e)
>         {
>                e.printStackTrace();
>         }
>         return bytearray;
>      }
> Please guide me on this point
> Thanks
> Abhinav
>    
> _______________________________________________
> Biojava-l mailing list  -  Biojava-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/biojava-l
>
>   



More information about the Biojava-l mailing list