@Override
	public boolean pakkaaTiedosto() throws FileNotFoundException, IOException {
		System.out.println("LZW pakkaus aloitetaan");
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(lahde));
		BittiOutputStream bos = new BittiOutputStream (new BufferedOutputStream(new FileOutputStream(kohde)));
		
		int c;
		int seuraavaKoodi = 256;
		
		int luettuTavuja = 0;
		StringBuilder merkkijono = new StringBuilder(); //prefix
		String prefix = "";
		
		//Listn vakiosanasto
		for (int i = 0; i < 256; i++) {
			String merkkiString = new String("" + (char)i);
			pakkausSanasto.lisaaElementti(merkkiString, i);
		}
		int bittiLaskuri = 0 ;
		boolean loppu = false;
		while (!loppu) {
			c = bis.read();
			if (c == -1)
				loppu = true;
			luettuTavuja++;
			merkkijono.append((char)c);

			//Luetaan merkkej sisn lhdetiedostosta kunnes sanastosta ei en lydy merkkijono + c.
			//Siin vaiheessa kirjoitetaan kohdetiedostoon merkkijono
			if (!pakkausSanasto.sisaltaaAvaimen(merkkijono.toString())) {
				int koodi = seuraavaKoodi++;
				pakkausSanasto.lisaaElementti(merkkijono.toString(), koodi);
				merkkijono.deleteCharAt(merkkijono.length()-1);
				int kirjoitettavaInt = ((Integer)pakkausSanasto.annaArvo("" + merkkijono)).intValue();
				bos.write(12, kirjoitettavaInt);
				bittiLaskuri += 12;
				merkkijono = new StringBuilder();
				merkkijono.append((char)c);
			}
			// jos sanasto on tynn, hyltn se:
			if (seuraavaKoodi == 4096) {
				pakkausSanasto = new HajautusTaulukko();
				for (int i = 0; i < 256; i++) {
					String merkkiString = new String("" + (char)i);
					pakkausSanasto.lisaaElementti(merkkiString, new Integer(i));
				}
				seuraavaKoodi = 256;
			}
		}
		bos.flush();
		bos.close();
		bis.close();
		System.out.println("Yhteens " + luettuTavuja + " tavua luettu lhdetiedostosta");
		System.out.println("Yhteens " + bittiLaskuri/8  + " tavua dataa kirjoitettu kohdetiedostoon");
		double teho = (double)(bittiLaskuri/8) / (double)luettuTavuja * 100;
		DecimalFormat df = new DecimalFormat("#.##");
		System.out.println("Pakkaustehokkuus: " + df.format(teho) + " %");
		return true;
	}