Grazie per gli aiuti....sono profano di Java,quindi con un esempio forse mi spiego meglio..
Ho questa funzione
codice:
package giu;
import java.io.BufferedReader;
import java.io.*;
import java.io.IOException;
import java.util.*;
public class princ {
private static String fileName = "Dato2.txt";
private static String file = "ris.txt";
private String geneid=null;
private static int row=0;
private static int numberOfNumericColumns=0;
private static int col=0;
Double[] values=new Double[numberOfNumericColumns];
String[]intest=null;
private ArrayList rows = new ArrayList();
Head h;
Riga r;
public boolean insRighe(Riga nuovo){
return rows.add(nuovo);
}
public List stampaRows(){
return rows;}
public Head stampaHead(){
return h;}
public void carica()throws IOException{
FileReader reader=new FileReader(fileName);
BufferedReader br = new BufferedReader(reader);
String line = null;
while ((line = br.readLine()) != null) {
line = line.replace (',', '.');
StringTokenizer st = new StringTokenizer(line);
numberOfNumericColumns = (st.countTokens()-1);
col=(numberOfNumericColumns+1);
//se siamo nella prima riga(contatore segna 0)
if(row==0){
intest=new String[col];
int j=0;
while(st.hasMoreTokens()){
intest[j]=(st.nextToken().trim());
j++;
}
h=new Head(intest);//crei l'oggetto head
String []qa=h.getHvalues();
String asd="";
for(int i=0;i<=qa.length-1;i++){
asd=asd.concat(qa[i]+" ");
}
System.out.println("head "+asd);//stampo contenuto dell' head
row=1;
}//fine if
else
{
Double[] values=new Double[numberOfNumericColumns];
int z=0;
geneid=st.nextToken();
while (st.hasMoreTokens()) {
String app=st.nextToken();
values[z]=Double.valueOf(app);
z++;
}
r=new Riga(geneid,values); //crei l'oggetto riga
System.out.println("riga");
System.out.println(r.getgeneid());
values=r.getvalues();
for(int e=0;e<=values.length-1;e++){
System.out.println(values[e]);
}
insRighe(r); //aggiungi
}
row++;
}
}
public byte[] getBytes(){
byte middlerow=' ';
byte endrow=';';
byte[] data=null;
Vector temp=new Vector(100000);
int i=0;
String g=null;
Riga r;
Double val[];
while(i<intest.length){
temp.addElement(intest[i].getBytes());
temp.addElement(Byte.valueOf(middlerow));
i++;
}
temp.addElement(Byte.valueOf(endrow));
System.out.println("Intestazione convertita in byte");
for(int l=0;l<rows.size()-1;l++){
r=(Riga)rows.get(l);
g=r.getgeneid();
temp.addElement(g.getBytes());
temp.addElement(Byte.valueOf(middlerow));
val=r.getvalues();
byte[] tempByte1;
for(int e=0;e<=val.length-1;e++){
//Returns a string representation of the double argument.
tempByte1 = Double.toString(val[e]).getBytes();
for (int j = 0; j < tempByte1.length; j++) {
temp.addElement(Byte.valueOf(tempByte1[j]));
temp.addElement(Byte.valueOf(middlerow));
}
temp.addElement(Byte.valueOf(endrow));
}
}
data=new byte[temp.size()];
for (int t=0;t<temp.size()-1;t++)
data[t]=(((Byte)temp.elementAt(t)).byteValue());
return data;
}
public static void main(String[] args) throws IOException {
byte x[];
String totale=null;
princ p=new princ();
p.carica();
System.out.println("Dati caricati");
x=p.getBytes();
System.out.println("Byte convertiti");
}
}
Mi è stato consigliato di utilizzare la funzione Double.toString per la conversione dei double perchè con il casting che facevo priva da double a byte perdevo le cifre decimali perchè chiaramente il double avrebbe richiesto 8 byte....
Così dovrei risolvere il problema, ma ho quest'eccezione
Exception in thread "main" java.lang.ClassCastException: [B
at giu.princ.getBytes(princ.java:155)
at giu.princ.main(princ.java:169)
Immagino sia dovuta al fatto che nel vector i double li memorizzo un byte alla volta mentre i tipi string e l'array di string li memorizzo in array di byte.
Penso quindi che la soluzione sia passargli le stringhe codificate e gli array di stringhe codificati byte per byte,ma non so realizzarlo praticamente.
Potreste postarmi del codice che fa questo magari documentandomelo un pò?
Vi prego di aiutarmi....