Changeset 2636


Ignore:
Timestamp:
04/18/07 12:02:51 (13 years ago)
Author:
melissa
Message:

Fixed RandomAccessStream to allow files >2GB; tweaked readers to accomodate this change.

Location:
trunk/loci/formats
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/RandomAccessStream.java

    r2601 r2636  
    7171 
    7272  /** The file pointer within the DIS. */ 
    73   protected int fp; 
     73  protected long fp; 
    7474 
    7575  /** The "absolute" file pointer. */ 
    76   protected int afp; 
     76  protected long afp; 
    7777 
    7878  /** Most recent mark. */ 
    79   protected int mark; 
     79  protected long mark; 
    8080 
    8181  /** Next place to mark. */ 
    82   protected int nextMark; 
     82  protected long nextMark; 
    8383 
    8484  /** The file name. */ 
     
    110110      dis = new DataInputStream(new BufferedInputStream( 
    111111        new FileInputStream(Location.getMappedId(file)), MAX_OVERHEAD)); 
    112       int len = (int) raf.length(); 
    113       buf = new byte[len < MAX_OVERHEAD ? len : MAX_OVERHEAD]; 
     112      long len = raf.length(); 
     113      buf = new byte[(int) (len < MAX_OVERHEAD ? len : MAX_OVERHEAD)]; 
    114114      raf.readFully(buf); 
    115115      raf.seek(0); 
     
    159159 
    160160  /** Seeks to the given offset within the stream. */ 
    161   public void seek(long pos) throws IOException { afp = (int) pos; } 
     161  public void seek(long pos) throws IOException { afp = pos; } 
    162162 
    163163  /** Alias for readByte(). */ 
     
    175175 
    176176  /** Gets the current (absolute) file pointer. */ 
    177   public int getFilePointer() { return afp; } 
     177  public long getFilePointer() { return afp; } 
    178178 
    179179  /** Closes the streams. */ 
     
    207207    int status = checkEfficiency(1); 
    208208 
    209     int oldAFP = afp; 
     209    long oldAFP = afp; 
    210210    if (afp < raf.length() - 1) afp++; 
    211211 
     
    216216    } 
    217217    else if (status == ARRAY) { 
    218       return buf[oldAFP]; 
     218      return buf[(int) oldAFP]; 
    219219    } 
    220220    else { 
     
    295295      n = array.length; 
    296296      if ((buf.length - afp) < array.length) { 
    297         n = buf.length - afp; 
    298       } 
    299       System.arraycopy(buf, afp, array, 0, n); 
     297        n = buf.length - (int) afp; 
     298      } 
     299      System.arraycopy(buf, (int) afp, array, 0, n); 
    300300    } 
    301301    else n = raf.read(array); 
     
    323323    } 
    324324    else if (status == ARRAY) { 
    325       if ((buf.length - afp) < n) n = buf.length - afp; 
    326       System.arraycopy(buf, afp, array, offset, n); 
     325      if ((buf.length - afp) < n) n = buf.length - (int) afp; 
     326      System.arraycopy(buf, (int) afp, array, offset, n); 
    327327    } 
    328328    else { 
     
    349349    } 
    350350    else if (status == ARRAY) { 
    351       System.arraycopy(buf, afp, array, 0, array.length); 
     351      System.arraycopy(buf, (int) afp, array, 0, array.length); 
    352352    } 
    353353    else { 
     
    368368    } 
    369369    else if (status == ARRAY) { 
    370       System.arraycopy(buf, afp, array, offset, n); 
     370      System.arraycopy(buf, (int) afp, array, offset, n); 
    371371    } 
    372372    else { 
     
    381381  public int available() throws IOException { 
    382382    if (fileCache.get(this) == Boolean.FALSE) reopen(); 
    383     return dis != null ? dis.available() + ext : 
     383    int available = dis != null ? dis.available() + ext : 
    384384      (int) (length() - getFilePointer()); 
     385    if (available < 0) available = Integer.MAX_VALUE;  
     386    return available;  
    385387  } 
    386388 
     
    398400    if (fileCache.get(this) == Boolean.FALSE) reopen(); 
    399401    dis.reset(); 
    400     fp = (int) (length() - dis.available()); 
     402    fp = length() - dis.available(); 
    401403  } 
    402404 
     
    420422    int newSize = sum / div; 
    421423    if (newSize > MAX_OVERHEAD) newSize = MAX_OVERHEAD; 
    422     if (lastValid < MAX_HISTORY) {/*recent.add(new Integer(newSize)); */ 
     424    if (lastValid < MAX_HISTORY) { 
    423425      bufferSizes[lastValid] = newSize; 
    424426      lastValid++; 
     
    443445    if (dis != null) { 
    444446      while (fp > (length() - dis.available())) { 
     447        while (fp - length() + dis.available() > Integer.MAX_VALUE) { 
     448          dis.skipBytes(Integer.MAX_VALUE); 
     449        }  
    445450        dis.skipBytes((int) (fp - (length() - dis.available()))); 
    446451      } 
     
    457462    else if (afp >= fp && dis != null) { 
    458463      while (fp < afp) { 
    459         int skip = dis.skipBytes(afp - fp); 
     464        while (afp - fp > Integer.MAX_VALUE) { 
     465          fp += dis.skipBytes(Integer.MAX_VALUE); 
     466        } 
     467        int skip = dis.skipBytes((int) (afp - fp));  
    460468        if (skip == 0) break; 
    461469        fp += skip; 
     
    495503          //fp = mark; 
    496504 
    497           fp = (int) (length() - dis.available()); 
     505          fp = length() - dis.available(); 
    498506          while (fp < afp) { 
    499             int skip = dis.skipBytes(afp - fp); 
     507            while (afp - fp > Integer.MAX_VALUE) { 
     508              fp += dis.skipBytes(Integer.MAX_VALUE); 
     509            } 
     510            int skip = dis.skipBytes((int) (afp - fp)); 
    500511            if (skip == 0) break; 
    501512            fp += skip; 
     
    533544      dis = new DataInputStream(new BufferedInputStream( 
    534545        new FileInputStream(Location.getMappedId(file)), MAX_OVERHEAD)); 
    535       int len = (int) raf.length(); 
    536       buf = new byte[len < MAX_OVERHEAD ? len : MAX_OVERHEAD]; 
     546      long len = raf.length(); 
     547      buf = new byte[(int) (len < MAX_OVERHEAD ? len : MAX_OVERHEAD)]; 
    537548      raf.readFully(buf); 
    538549      raf.seek(0); 
  • trunk/loci/formats/in/BMPReader.java

    r2616 r2636  
    5959 
    6060  /** Offset to image data. */ 
    61   private int global; 
     61  private long global; 
    6262 
    6363  // -- Constructor -- 
  • trunk/loci/formats/in/EPSReader.java

    r2616 r2636  
    9393    } 
    9494    else { 
    95       int pos = ras.getFilePointer(); 
     95      long pos = ras.getFilePointer(); 
    9696      String len = ras.readLine(); 
    9797      ras.seek(pos); 
  • trunk/loci/formats/in/MNGReader.java

    r2616 r2636  
    7171    } 
    7272 
    73     int offset = ((Integer) offsets.get(no)).intValue(); 
     73    long offset = ((Long) offsets.get(no)).longValue(); 
    7474    in.seek(offset); 
    75     int end = ((Integer) lengths.get(no)).intValue(); 
    76     byte[] b = new byte[end - offset + 8]; 
     75    long end = ((Long) lengths.get(no)).longValue(); 
     76    byte[] b = new byte[(int) (end - offset + 8)]; 
    7777    in.read(b, 8, b.length - 8); 
    7878    b[0] = (byte) 0x89; 
     
    132132      String code = new String(b); 
    133133 
    134       int fp = in.getFilePointer(); 
     134      long fp = in.getFilePointer(); 
    135135 
    136136      if (code.equals("IHDR")) { 
    137         offsets.add(new Integer((int) in.getFilePointer() - 8)); 
     137        offsets.add(new Long(in.getFilePointer() - 8)); 
    138138        core.imageCount[0]++; 
    139139      } 
    140140      else if (code.equals("IEND")) { 
    141         lengths.add(new Integer(fp + (int) len + 4)); 
     141        lengths.add(new Long(fp + len + 4)); 
    142142      } 
    143143      else if (code.equals("LOOP")) { 
    144         stack.add(new Integer((int) (in.getFilePointer() + len + 4))); 
     144        stack.add(new Long(in.getFilePointer() + len + 4)); 
    145145        in.skipBytes(1); 
    146146        maxIterations = DataTools.read4SignedBytes(in, false); 
  • trunk/loci/formats/in/MetamorphReader.java

    r2604 r2636  
    314314  void parseUIC2Tags(long uic2offset) throws IOException { 
    315315 
    316     int saveLoc = in.getFilePointer(); 
     316    long saveLoc = in.getFilePointer(); 
    317317    in.seek(uic2offset); 
    318318 
  • trunk/loci/formats/in/NRRDReader.java

    r2625 r2636  
    4545 
    4646  /** Offset to pixel data. */ 
    47   private int offset; 
     47  private long offset; 
    4848 
    4949  // -- Constructor --  
  • trunk/loci/formats/in/OIBReader.java

    r2616 r2636  
    286286 
    287287      for (int i=0; i<labels.length; i++) { 
    288         System.out.println("label: " + labels[i]); 
    289         System.out.println("dim: " + dims[i]); 
    290         System.out.println("start: " + starts[i]); 
    291         System.out.println("stop: " + stops[i]); 
    292         System.out.println(); 
    293  
    294288        if (labels[i].equals("\"X\"") || labels[i].equals("\"Y\"")) { } 
    295289        else if (labels[i].equals("\"C\"")) { 
     
    623617          } 
    624618        } 
    625         else if (entryName.equals("OibInfo.txt")) { /* ignore this */ } 
    626         else if (data[0] == (byte) 0xff && data[1] == (byte) 0xfe) { 
     619        else if (entryName.equals("OibInfo.txt")) { } 
     620        else {  
     621        //else if (data[0] == (byte) 0xff && data[1] == (byte) 0xfe) { 
    627622          String ini = DataTools.stripString(new String(data)); 
    628623          StringTokenizer st = new StringTokenizer(ini, "\n"); 
  • trunk/loci/formats/in/OMEXMLReader.java

    r2616 r2636  
    194194            String endian = test.substring(ndx + 11); 
    195195            endianness.add(new Boolean(!endian.toLowerCase().startsWith("t"))); 
    196             bigEndianPos.add(new Integer(in.getFilePointer() - read - 9 + ndx)); 
     196            bigEndianPos.add(new Long(in.getFilePointer() - read - 9 + ndx)); 
    197197            numDatasets++; 
    198198          } 
     
    216216 
    217217    for (int i=0; i<numDatasets; i++) { 
    218       in.seek(((Integer) bigEndianPos.get(i)).intValue()); 
     218      in.seek(((Long) bigEndianPos.get(i)).longValue()); 
    219219      boolean found = false; 
    220220      buf = new byte[8192]; 
     
    286286        } 
    287287 
    288         int bufSize = ((Integer) offsets[i].get(0)).intValue() - 
    289           in.getFilePointer(); 
     288        int bufSize = (int) (((Long) offsets[i].get(0)).longValue() - 
     289          in.getFilePointer()); 
    290290        buf = new byte[bufSize]; 
    291291      } 
  • trunk/loci/formats/in/SlidebookReader.java

    r2616 r2636  
    140140 
    141141    int check = in.read(); 
    142     int lastH = 0; 
     142    long lastH = 0; 
    143143    while (check == 'h') { 
    144144      lastH = in.getFilePointer(); 
Note: See TracChangeset for help on using the changeset viewer.