Hola:
 
Este bucle    
Código Java:
Ver originalwhile(dis.read() != -1){
                dat = dis.read();
                list_num.add(dat);
            }
  
está tirando datos. Cada vez que haces un read() se lee un dato del fichero, haces un read en la condicion del while para ver que no es -1 y ese dato se descarta, porque luego hacer otro read() dentro del bucle. 
Se bueno.