sabbas_ Δημοσ. 6 Ιουνίου 2008 Δημοσ. 6 Ιουνίου 2008 Γεια σας παιδιά έχω το εξής πρόβλιμα, πρέπει να αποθηκευσω ένα Btree σε ένα αρχείο κ στη συνέχεια να διαβάσω! Λοιπον έχω φτιάξη το Btree δουλεύει μια χαρα και τορα δυσκυολευομαι! Αρχικα έχω ενα κόμβο του δένδρου >public class TNode { private Item[] element ;//pinakas apo Item private TNode parent;//deikths pros to patera public TNode[] sons;//Array apo Kombos TNode public int nofSons ;//ari8mos tou sunolo ton paidion και τον επιπλέον κόμβο με τα περισσότερα χαρακρητιστικά >public class abTNode extends TNode implements Serializable{ int curnofSons; // trexon plithos gion public abTNode(Item[] items,abTNode parent , int nofsons){ //constructor super(items , parent , nofsons); // xrisi tou TNode curnofSons=1; } Στη συνέχει το Βδενδρο >public class abTree extends LinkedGeneralTree{ static RandomAccessFile MyFile; long pos; /*Μηπως πρέπει να γίνει long[] */ static final int serialized_object_size = 56; int a; int b; int mycount; public abTree(int min , int max){ setRoot(null); setSize(0); //a=b/2 b = max; a = max/2; } για την αποθήκευση του δένδρου κ ακολούθος κόμβο κάνω το εξής: >public void saveBTree(String myfile) throws IOException { if (Root != null) { MyFile = new RandomAccessFile (myfile, "rw"); pos = 0; saveBinNode(Root); MyFile.close(); } } public long saveBinNode(abTNode rt) throws IOException { long[] child = new long[b]; long node_pos; if (rt == null){ return (long)(-1);} else { for(int i=0;i<rt.nofSons-1;i++) child[i] = saveBinNode((abTNode) rt.sons[i]); ByteArrayOutputStream bos = new ByteArrayOutputStream() ; ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject(rt.element()); for(int i = 0;i<rt.nofSons-1;i++) out.writeLong(child[i]); out.close(); byte[] buf = bos.toByteArray(); node_pos = pos; MyFile.seek(node_pos); MyFile.write(buf); pos += buf.length; return node_pos; } } αυτό ότι αφορά την αποθήκευση!Η οποία δίχνει να αποθηκεύει κανονικά! Κατα την ανάγνωση όμως ποθ την κάνω ώσ εξής: >public abTree(String myfile) throws IOException, ClassNotFoundException { MyFile = new RandomAccessFile (myfile, "r"); pos = MyFile.length(); Root = loadBinNode(); MyFile.close(); } public abTNode loadBinNode() throws IOException, ClassNotFoundException { long[] child = new long[b] ; if (pos == 0) return null; else { byte[] buf = new byte[serialized_object_size]; pos -= serialized_object_size; MyFile.seek(pos); MyFile.read(buf); ByteArrayInputStream bis = new ByteArrayInputStream(buf); ObjectInputStream ois = new ObjectInputStream(bis); Item[] val = (Item[]) ois.readObject(); TNode rt = new TNode(val); System.out.println("Reading: " + rt.element()); child = (long[]) ois.readObject(); for(int u=0;u<child.length;u++) if (child[u] == -1) rt.setSon(u,(null)); else rt.setSon(u,loadBinNode()); return (abTNode) rt; } } κατα την εκτέλεση μου βγάζει το εξής πρόβλιμα: όταν τα διαβάζει στο σημείο ByteArrayInputStream bis = new ByteArrayInputStream(buf); ObjectInputStream ois = new ObjectInputStream(bis); /*εδο βγάζει το εξής μύνημα Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 00036B65 at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) at abTree.loadBinNode(abTree.java:401)*/ εάν κάποιος μπορέι να βοηθίσει! Ευχαριστώ εκ των προτέρων!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.