Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Start {
- public static void main(String[] args) {
- try {
- BigFile file = new BigFile("C://test.txt", 10);
- for (char c : file)
- System.out.println(c + " (" + BigFile.IoReads + "th read)");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- import java.util.*;
- import java.io.*;
- public class BigFile implements Iterable<Character> {
- BufferedReader _reader;
- int _bufferSize;
- public static long IoReads = 0;
- public BigFile(String filePath, int bufferSize) throws Exception {
- _reader = new BufferedReader(new FileReader(filePath));
- _bufferSize = bufferSize;
- if (_bufferSize < 1)
- throw new Exception("buffer too small");
- }
- public void Close() {
- try {
- _reader.close();
- } catch (Exception ex) {
- }
- }
- public Iterator<Character> iterator() {
- return new FileIterator(_bufferSize);
- }
- private class FileIterator implements Iterator<Character> {
- char[] _buffer;
- long _gindex;
- int _lastRead;
- public FileIterator(int bufferSize) {
- _buffer = new char[bufferSize];
- _gindex = -1;
- _lastRead = bufferSize;
- }
- public boolean hasNext() {
- try {
- _gindex++;
- if (_gindex % _buffer.length == 0) {
- if (_lastRead == _buffer.length) {
- _lastRead = _reader.read(_buffer, 0, _buffer.length);
- BigFile.IoReads++;
- }
- }
- } catch (Exception ex) {
- _buffer = null;
- ex.printStackTrace();
- }
- return _buffer != null && (int) (_gindex % _bufferSize) < _lastRead;
- }
- public Character next() {
- int bufferIndex = (int) (_gindex % _buffer.length);
- return _buffer[bufferIndex];
- }
- public void remove() {
- }
- }
- }
Add Comment
Please, Sign In to add comment