public final byte[] readBytes(final int amount) throws FileNotOnDiskException, DiskReadException {
		checkExists();
		byte[] buffer = new byte[FILE_READ_BUFFER_SIZE];
		final List<Byte> list = new ArrayList<Byte>();
		int totalRead = 0;
		BufferedInputStream reader = null;
		try {
			reader = new BufferedInputStream(new FileInputStream(this));
			while (totalRead < amount) {
				final int justReadCount = reader.read(buffer);
				if (justReadCount < 0) break;

				final int toReadInCount = totalRead + justReadCount > amount ? amount - totalRead : justReadCount;
				for (int i = 0; i < toReadInCount; i++)
					list.add(buffer[i]);

				totalRead += toReadInCount;
			}
		} catch (final FileNotFoundException e) {
			handleNotExists();
			return null;
		} catch (final IOException e) {
			throw new DiskReadException("Failed to read bytes from file", this.toString(), e);
		} finally {
			closeStream(reader);
		}
		final byte[] listBytes = new byte[list.size()];
		for (int i = 0; i < list.size(); i++)
			listBytes[i] = list.get(i);
		return listBytes;
	}