Guest User

Untitled

a guest
Jan 19th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.66 KB | None | 0 0
  1. public class Start {
  2.     public static void main(String[] args) {
  3.         try {
  4.             BigFile file = new BigFile("C://test.txt", 10);
  5.             for (char c : file)
  6.                 System.out.println(c + " (" + BigFile.IoReads + "th read)");
  7.         } catch (Exception e) {
  8.             e.printStackTrace();
  9.         }
  10.     }
  11. }
  12.  
  13.  
  14. import java.util.*;
  15. import java.io.*;
  16.  
  17. public class BigFile implements Iterable<Character> {
  18.     BufferedReader _reader;
  19.     int _bufferSize;
  20.  
  21.     public static long IoReads = 0;
  22.  
  23.     public BigFile(String filePath, int bufferSize) throws Exception {
  24.         _reader = new BufferedReader(new FileReader(filePath));
  25.         _bufferSize = bufferSize;
  26.         if (_bufferSize < 1)
  27.             throw new Exception("buffer too small");
  28.     }
  29.  
  30.     public void Close() {
  31.         try {
  32.             _reader.close();
  33.         } catch (Exception ex) {
  34.         }
  35.     }
  36.  
  37.     public Iterator<Character> iterator() {
  38.         return new FileIterator(_bufferSize);
  39.     }
  40.  
  41.     private class FileIterator implements Iterator<Character> {
  42.         char[] _buffer;
  43.         long _gindex;
  44.         int _lastRead;
  45.  
  46.         public FileIterator(int bufferSize) {
  47.             _buffer = new char[bufferSize];
  48.             _gindex = -1;
  49.             _lastRead = bufferSize;
  50.         }
  51.  
  52.         public boolean hasNext() {
  53.             try {
  54.                 _gindex++;
  55.                 if (_gindex % _buffer.length == 0) {
  56.                     if (_lastRead == _buffer.length) {
  57.                         _lastRead = _reader.read(_buffer, 0, _buffer.length);
  58.                         BigFile.IoReads++;
  59.                     }
  60.                 }
  61.             } catch (Exception ex) {
  62.                 _buffer = null;
  63.                 ex.printStackTrace();
  64.             }
  65.  
  66.             return _buffer != null && (int) (_gindex % _bufferSize) < _lastRead;
  67.         }
  68.  
  69.         public Character next() {
  70.             int bufferIndex = (int) (_gindex % _buffer.length);
  71.             return _buffer[bufferIndex];
  72.         }
  73.  
  74.         public void remove() {
  75.         }
  76.     }
  77. }
Add Comment
Please, Sign In to add comment