tatic char[] append(char[] a, int e) {
     a  = Arrays.copyOf(a, a.length + 1);
     a[a.length - 1] = (char)e;
     return a;
 }

 public static void main (String[] args) {
  InputStreamReader rd = new InputStreamReader(System.in);
  char keyArray[] = new char[0];
  int bitlen, bytelen, c=0;   
  byte byteArray[];//결과변수
  char resArray[];
  int cnt, loc=0;
  String str1, str2;

//  준비단계 - 키보드 문자열 입력 저장
  System.out.print("type a binary string. ? ");
  while(true)
  {
   try {
   c = rd.read();
   }
   catch (IOException e) {
    System.out.println("입력 오류 발생");
   }
   
   if(c == '\r'  || c == '\n')
    break;
   
   if((c != '0') && (c !='1'))
   {
    System.out.println("(error) input character must be '0' or '1'");
    return;
   }
   
   keyArray = append(keyArray, c);
  }

  str1 = String.valueOf(keyArray);//입력받은 문자열 str1에저장
  System.out.println("(input) charArray-size = " + keyArray.length + " 글자,   val = \"" + str1 + "\""); 
  
//  압축단계 - 키보드 문자열 압축처리  
  bitlen = keyArray.length;
  bytelen = (bitlen+7) / 8;
  byteArray = new byte[bytelen];//압훅할때 쓰이는 변수
  resArray = new char[bitlen];//복원할때 쓰이는 변수
  Arrays.fill(resArray, 'x');
    
  cnt=0;//읽는 순서 글짜
  while(cnt < bitlen)
  {
   loc = cnt % 8;
   if(loc == 0) c = 0;
   c <<= 1;
   c |= (keyArray[cnt] == '0') ? 0 : 1 ;//|는 비트 OR 연산 빈공간에 0을 넣느냐 1을 넣느냐
   if(loc == 7)   byteArray[cnt/8]=(byte) c; /* (point1) 문장 입력 위치  마지막글자 처리 완료 C라는 공간을 다샤용하였다 인티져중에 1개만 사용/*/
   

   cnt++;   
  }
   if((cnt % 8) != 0)   /* 예외 생략 18*/ ;
  
  System.out.print("(compression result) byteArray-size = " + bytelen + " 바이트,   byteArray = ");
  for(int i=0; i < bytelen; i++)
   System.out.print(String.format(" 0xX", byteArray[i]));
  System.out.println();
  
//  복원단계 - 이부분
  cnt=0;
  while(cnt < bitlen)
  {
  if(cnt==0) {loc=0; c=byteArray[loc]; c=0;}
  if(cnt>7) {loc++; c=byteArray[loc];}
  c<<=1;
  c&=(c==0) ? 0 :1 ;
  resArray[cnt]=(char) c;
  if(bytelen>loc) break;
  
  cnt++; 
  }
  
  str2 = String.valueOf(resArray);
  System.out.println("(uncompression result) charArray-size = " + resArray.length + " 글자,   val = \"" + str2 + "\""); 
  if (str1.equals(str2)) System.out.println(" (string comparison) --> Good Work!");
  else  System.out.println(" (string comparison) --> Something is wrong????");
  if (Arrays.equals(keyArray, resArray)) System.out.println(" (array comparison) --> Good Work!");
  else  System.out.println(" (array comparison) --> Something is wrong????");
 }
 이건데 압축은 했는데 복원을 못하겠음 어떻게해야하냐??? 짠다고 짜봤는데 결과가 안나옴... 아니면 힌트라도좀 주삼