Author: bpoussin Date: 2012-09-08 01:16:26 +0200 (Sat, 08 Sep 2012) New Revision: 3769 Url: http://forge.codelutin.com/repositories/revision/isis-fish/3769 Log: lorsqu'on ecrit n'importe ou, ca donne n'importe quoi :) avant d'ecrire on se position la ou il faut et tout marche :) Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java Modified: trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java 2012-09-07 18:03:30 UTC (rev 3768) +++ trunk/src/main/java/fr/ifremer/isisfish/datastore/ResultMappedStorage.java 2012-09-07 23:16:26 UTC (rev 3769) @@ -239,14 +239,14 @@ * @return * @throws IOException */ - public static ResultHeaderMatrix read (RandomAccessFile raf) throws IOException { - long pos = raf.getFilePointer(); + public static ResultHeaderMatrix read (RandomAccessFile raf, long offset) throws IOException { + raf.seek(offset); long mark = raf.readLong(); ResultHeaderMatrix result = null; if (mark != RESULT_MATRIX) { // on a pas le bon marqueur, on se replace avant sa lecture - raf.seek(pos); + raf.seek(offset); } else { result = new ResultHeaderMatrix(); result.stepValue = raf.readInt(); @@ -273,7 +273,8 @@ } return result; } - public void write (RandomAccessFile raf) throws IOException { + public void write (RandomAccessFile raf, long offset) throws IOException { + raf.seek(offset); long mark = RESULT_MATRIX; raf.writeLong(mark); @@ -303,7 +304,7 @@ public ResultMapped(RandomAccessFile raf, long offset) throws IOException { this.raf = raf; this.offset = offset; - ResultHeaderMatrix header = ResultHeaderMatrix.read(raf); + ResultHeaderMatrix header = ResultHeaderMatrix.read(raf, offset); if (header != null) { step = new TimeStep(header.stepValue); name = header.name; @@ -350,20 +351,18 @@ ResultHeaderMatrix header = new ResultHeaderMatrix(); header.set(step.getStep(), name, dims.length, dimNames, dims, sems, dataSize); - header.write(raf); + header.write(raf, offset); // on prend la position apres l'ecriture de l'entete - long size = raf.getFilePointer(); - - long dataOffset = offset + size; + long dataOffset = raf.getFilePointer(); // on cree la nouvelle matrice comme il faut (semantique non decore) DoubleBigMappedVector data = new DoubleBigMappedVector(raf, dataOffset, dataSize); this.matrix = MatrixFactory.getInstance().create(name, sems, dimNames, data); // et on met les valeurs de l'ancienne dans la nouvelle this.matrix.paste(matrix); - size += dataSize * 8; /* un double est sur 8 bytes*/ - this.size = size; + // la taille du tout est la longueur du header (position des data - offset) + taille des data + size = dataOffset - offset + dataSize * 8; /* un double est sur 8 bytes*/ } /**