[Biojava-l] Error while reading byte data for creating a Trace.
Richard Holland
holland at ebi.ac.uk
Tue Nov 6 12:05:12 EST 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
The String is where you're going wrong. ABI files are not Stringifyable
- - they are binary data. Converting them to a String will corrupt them.
cheers,
Richard
abhinav wrote:
> Richard Holland wrote:
> 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
>>>>
>
> 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
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFHMJ7I4C5LeMEKA/QRAupLAJ9YDoGohk5uZSNYZnRRMJ5WeNDpGgCfdCyg
+Z/gXBbPmrG3SuQlfeHuD3A=
=akSf
-----END PGP SIGNATURE-----
More information about the Biojava-l
mailing list