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????");
}
이건데 압축은 했는데 복원을 못하겠음 어떻게해야하냐??? 짠다고 짜봤는데 결과가 안나옴... 아니면 힌트라도좀 주삼
어떤 압축 알고리즘을 썼는데?