public synchronized boolean fill() throws IOException {

		try {
			if (pos > fc.size())
				return false;
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		byte[] bytes = new byte[CHUNK];
		bb = ByteBuffer.wrap(bytes);
		try {
			// System.out.println(pos + " - " + (pos + CHUNK));
			fc.read(bb, pos);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		pos += CHUNK;

		String tmp = new String(bytes);
		if (tmp.charAt(0) == '\n')
			tmp = tmp.substring(1);
		tmp = leftOver + tmp;
		Scanner s = new Scanner(tmp);
		s.useDelimiter("\n");
		boolean first = true;
		while (s.hasNext()) {
			if (first) {
				first = !first;
				leftOver = leftOver + s.next();
			} else
				leftOver = s.next();
			buffer.add(leftOver);
			// System.out.println("adding " + leftOver);
		}
		s.close();
		// retain leftover and don't add to buffer
		if (tmp.charAt(tmp.length() - 1) == '\n' && buffer.size() > 0)
			leftOver = "";

		/*
		 * while (leftOver.charAt(leftOver.length() - 1) != '\n' && pos <
		 * fc.size()) { byte[] b = new byte[leftOver.getBytes().length]; int i =
		 * 0; for (byte by : leftOver.getBytes()) { b[i] = by; i++; }
		 * 
		 * b[leftOver.getBytes().length - 1] = getByte(); leftOver = new
		 * String(b); System.out.println("LEFTOVER: " + leftOver); }
		 */

		if (buffer.size() > 0)
			return true;
		return false;
	}