Object, Int-Array und String Problem

terminus

Grünschnabel
Hallo!

Ich habe ein Problem wo ich nicht weiter komme:
Ich habe eine Methode geschrieben, mit der ein Array vom Typ Integer zunächst in ein Object und anschließed zu einem String gemacht wird.
Der String wird anschließend in ein Byte-Array zerlegt und in einer Datei gespeichert.

Das Problem was ich habe ergibt sich beim Auslesen. Wenn ich das zu Anfang eingegebene Array als String ausgeben lasse und direkt dahinter den String den ich wieder aus der Datei bekommen habe, so ist die Ausgabe der Konsole gleich, ich bekomme den String aber nicht zurück in eine Array vom Typ Integer.

Kann mir da jemand helfen?

BTW.: hier sind die drei Methoden die ich benutze:
Code:
public static void saveTest() throws FileNotFoundException, IOException{
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0};
   	Object o;
        o = (Object)arr;
        FileOutputStream fos = new  FileOutputStream( new File( "test.dat" ) );
        byte[] byteText = getBytes( o.toString() );
        for(int i=0;i<byteText.length-1;i++){
            fos.write((int) byteText[i]);
        }
        fos.close();
     }

     public static void loadTest() throws FileNotFoundException, IOException{
         FileInputStream in = new FileInputStream( new File( "test.dat" ) );
         byte[] b = new byte[0];
         int a = in.read();
         while( a >= 0 ){
             b = growArray( b, 1 );
             b[ b.length - 1 ] = (byte) a;
             a = in.read();
         }
         System.out.println( ( new int[]{1,2,3,4,5,6,7,8,9,0} ).toString() );
         String tmp = "";
         for( int i = 0; i < b.length; i++ )
             tmp += (char)b[ i ];
         System.out.println( tmp );
         Object o = tmp;
         int[] ar = (int[])tmp;  ==> funktioniert nicht
     }

	public static byte[] growArray( byte[] arr, int length ){
		byte[] tmp = new byte[ arr.length + length ];
		System.arraycopy( arr, 0, tmp, 0, arr.length );
		return tmp;
	}


Bevor ich es vergesse: Ziel der Sache ist es, ein Integer-Array in eine Datei zu speichern und wieder auszulesen. Ich kann leider nicht alle Funktionen verwenden, da ich auf dem Compiler Level 1.3 (normal wäre 1.6) arbeite, da der ganze Code auf LeJOS laufen muss, einer Javainterpreter Software für den Lego NXT-Brick.
 
Zuletzt bearbeitet:
Jo, in Arrays kann nicht gecastet werden. Schreib dir ne Methode "IntArrToString", in der du dein Int-Array in ein String umwandelst (z. B. alle Integer-Werte nacheinander separiert durch Kommata). Diesen speicherst du dann. Beim auslesen parst du dann den String auf umgekehrten Weg wieder zurück in dein int-Array.

btw: Ein FileOutputStream kann mehrere Bytes auf einmal schreiben und ein FileInputStream lesen - ist performanter. Und bei "loadTest" wird der InputStream nicht wieder geschlossen.
 
das bei testLoad() der InputStream nicht wieder geschlossen wird ist mir bewusst, aber soweit war ich noch net ;-)

Ich werde das mal versuchen mit IntArrtoStr. Sage dann bescheid obs geht.

Danke für deine Hilfe!
 
alles klar habs geschafft:

Code:
     public static void saveTest() throws FileNotFoundException, IOException{
        int[] arr = new int[]{11,12,13,14,15,16,17,18,19,20};
        FileOutputStream fos = new  FileOutputStream( new File( "test.dat" ) );
        byte[] byteText = getBytes( IntArrtoStr( arr ) );
        for(int i=0;i<byteText.length-1;i++){
            fos.write((int) byteText[i]);
        }
        fos.close();
     }

     public static void loadTest() throws FileNotFoundException, IOException{
         FileInputStream in = new FileInputStream( new File( "test.dat" ) );
         String tmp = "";
         int a = in.read();
         while( a >= 0 ){
             tmp += (char) a;
             a = in.read();
         }
         in.close();
         a = 0;
         int i = 0;
         int[] code = new int[ 0 ];
         while( a < tmp.length() ){
             for( i = a; i < tmp.length(); i++ )
                 if( tmp.charAt( i ) == ',' )
                     break;
             code = growArray( code , 1 );
             code[ code.length - 1 ] = Integer.parseInt( tmp.substring(a, i) );
             a = i + 1;
         }
     }

	public static int[] growArray( int[] arr, int length ){
		int[] tmp = new int[ arr.length + length ];
		System.arraycopy( arr, 0, tmp, 0, arr.length );
		return tmp;
	}

    public static String IntArrtoStr( int[] arr ){
        String ret = "";
        for( int i = 0; i < arr.length; i++ )
            ret += arr[ i ] + ",";
        return ret;
    }

Danke nochmals für deine Hilfe!

~MfG~
 
Seh ich das richtig dass du das Array speichern möchtest?

Wenn du es nur kurzzeitig und nicht portabel speichern möchtest kannst du einen ObjectOutputStream bzw. ObjectInputStream verwenden (writeObject/readObject).

Statt einer eigenen Methode intArrayToString kannst du Array.toString(array) verwenden.

Statt die bytes einzeln zu schreiben kannst du auch einfach die write Methode mit einem byte-Array verwenden.

Um wieder ein Array aus deinem String zu kriegen bietet sich String.split(",") an. Du erhälst ein String Array welches du dann Komponentenweise mit Integer.parseInt wieder in ein int-Array verwandeln kannst. Vorteil ist, dass du die Größe des Arrays kennst und nicht so ein Problem hast das Ende einer Zahl zu finden.
 
ich hab den Roboter gerade nicht hier, ich werds aber ausprobieren sobald ich ihn wieder habe.

Ich meine aber, dass ObjectOutputStream oder ObjectInputStream auf der Programmierebene auf der ich mich befinde nicht funktioniert.

Trotzdem danke erstmal für deine Antwort!

MfG
 
Zurück