public void displayChunks(File filelocation) {
		int mask = 1 << 13;
		mask--; // 13 bit of '1's

		File f = filelocation;
		FileInputStream fs = null; // For sliding window
		FileInputStream fsChunk = null; // For chunking the input stream
		BufferedInputStream bis = null;
		try {
			fs = new FileInputStream(f);
			fsChunk = new FileInputStream(f);
			bis = new BufferedInputStream(fs);
			// BufferedInputStream is faster to read byte-by-byte from
			this.is = bis;

			long length = bis.available();
			long curr = length;
			// get the initial 1k hash window //
			int hash = inithash(window);
			curr -= bis.available(); // move the curr to next byte of the initial hash window

			byte[] chunk = null;
			String hashvalue = null;
			boolean firstChunk = true;
			int count = 0; // count chunks
			int duplicate = 0; // count duplicate
			while (curr < length) {
				if ((hash & mask) == 0) {
					// window found - hash it,
					if (firstChunk == true) {
						chunk = new byte[(int) curr];
						firstChunk = false;
					} else {
						chunk = new byte[segment];
					}
					if (fsChunk.read(chunk) != -1) {
						// perform the hash on the chunk
						hashvalue = sum.chunking(chunk);
						// If not exist then save
						if (!indexTable.containsKey(hashvalue)) {
							indexTable.put(hashvalue, f.getName());
						} else {
							// found duplicated chunks
							duplicate++;
						}
					}

					segment = 0;
					count++;
				}
				// next window's hash //
				hash = nexthash(hash);
				curr++;
				segment++;
			}
			System.out.println(count + " chunks generated for: " + f.getName());
			if (duplicate != 0) {
				System.out.println(duplicate + " duplicated chunks in: "
						+ f.getName());
			}
			bis.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// clean up
			if (fs != null) {
				try {
					is.close();
					fs.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}