- From: Toshiki Murata <mura@kansai.oki.co.jp>
- Date: Wed, 02 Apr 1997 15:25:45 +0900
- To: www-jigsaw@w3.org
> > > I used w3c.tools.dbm.jdbm for very large data(size > 7000). > > > Then w3c.tools.dbm.jdbm#lookup(key) cause > > That's a difficult bug to track, I haven't tried storing such big > > objects within that database. You may want to turn traces on (set > > debug = true, in jdbm.java). At least I fixed jdbm's bug. It is very simple. jdbm saves and restores only a part of diridx. (256bytes) A patch for this bug is following. So we can restore very large data in jdbm. diff -c -r -N w3c.orig/tools/dbm/jdbm.java w3c/tools/dbm/jdbm.java *** w3c.orig/tools/dbm/jdbm.java Sat Sep 28 01:52:36 1996 --- w3c/tools/dbm/jdbm.java Wed Apr 2 14:53:08 1997 *************** *** 462,468 **** private void restoreDirectory(DataInputStream in) throws IOException { ! this.diridx = new int[block_size/4] ; for (int i = 0 ; i < diridx.length ; i++) diridx[i] = in.readInt() ; } --- 462,468 ---- private void restoreDirectory(DataInputStream in) throws IOException { ! this.diridx = new int[dir_size] ; for (int i = 0 ; i < diridx.length ; i++) diridx[i] = in.readInt() ; } *************** *** 811,821 **** // Write the directory if needed: if ( dir_changed ) { trace ("saving directory.") ; DataOutputStream out = (new DataOutputStream ! (new FastByteArrayOutputStream(buffer))); saveDirectory(out) ; fd.seek(dir_adr) ; ! fd.write(buffer) ; dir_changed = false ; } // Write any modified bucket --- 811,822 ---- // Write the directory if needed: if ( dir_changed ) { trace ("saving directory.") ; + byte dir_buffer[] = new byte[dir_size*4]; DataOutputStream out = (new DataOutputStream ! (new FastByteArrayOutputStream(dir_buffer))); saveDirectory(out) ; fd.seek(dir_adr) ; ! fd.write(dir_buffer) ; dir_changed = false ; } // Write any modified bucket *************** *** 841,850 **** (new ByteArrayInputStream(buffer))); // Restore the directory: fd.seek(dir_adr) ; ! if (fd.read(buffer) != buffer.length) throw new IOException("unable to restore DB directory."); restoreDirectory(new DataInputStream ! (new ByteArrayInputStream(buffer))) ; // Initialize other fields: int dir_size = (1<<dir_bits) ; this.loaded_buckets = 0 ; --- 842,855 ---- (new ByteArrayInputStream(buffer))); // Restore the directory: fd.seek(dir_adr) ; ! byte dir_buffer[] = new byte[dir_size*4]; ! try { ! fd.readFully(dir_buffer); ! } catch (IOException e) { throw new IOException("unable to restore DB directory."); + } restoreDirectory(new DataInputStream ! (new ByteArrayInputStream(dir_buffer))) ; // Initialize other fields: int dir_size = (1<<dir_bits) ; this.loaded_buckets = 0 ; -- -------------------------------------- Toshiki Murata Oki Electric Industry Co., Ltd. Kansai Laboratory mura@kansai.oki.co.jp --------------------------------------
Received on Wednesday, 2 April 1997 01:25:45 UTC