2011-04-26 6 views
1

나는 모든 파일을 허프만 코드로 인코딩하려고한다. 심볼 당 비트 수 (허프만 코드)를 발견했습니다. 읽고 비트에 의해 파일 비트에 쓰기 기존의 클래스가 아닌 문자의 최소 크기로 :자바로 허프만 코딩

는 자바 파일로 문자를 인코딩 할 수 있습니까? 당신은 정말 파일에 하나의 비트를 쓰고 싶지 않아

답변

2

는, 날 믿어. 보통 우리는 바이트 버퍼를 정의하고, 메모리에 "파일"을 빌드하고, 모든 작업이 완료된 후 전체 버퍼를 작성합니다. 그렇지 않으면 영원히 (거의) 걸릴 것입니다.

비트 벡터이 필요한 경우 colt library을 살펴보십시오. 단일 비트를 쓰고 자한다면이 모든 비트 이동 작업을 수행하지 않는 것이 좋습니다.

+0

은 그냥 그 BitVector 바라 보았다. 그는 여전히 ByteBuffer에 쓰기 위해 backing'byte []'를 얻을 필요가 있습니다. 내가 뭐 놓친 거 없니? – alphazero

2

나는 허프만 클래스가 거기서 확신 해요,하지만 난 그들이있는 곳의 바로 잘 모르는 것 같아요. 자신 만의 롤을 만들고 싶다면이 봄에 할 수있는 두 가지 방법을 즉시 생각해보십시오.

첫 번째는 마스크 및 시프트 연산자를 사용하여 메모리 my에있는 비트 문자열을 어셈블하고 비트를 더 큰 데이터 객체 (즉 int 또는 longs)에 축적 한 다음 표준 스트리밍을 사용하여 파일에 기록합니다.

두 번째로 더 야심적이고 독립적 인 아이디어는 단일 비트를 작성하는 메소드가있는 OutputStream 구현을 작성한 다음이 OutputStream 클래스가 앞서 설명한 버퍼링/시프 팅/누적을 수행하고 아마도 결과를 랩핑 된 두 번째 OutputStream으로 낮 춥니 다.

4

당신은 당신이 그것을 만들로 인코딩을 저장이 완료되면 단순히 파일에 문자열 표현을 작성하는 BitSet을 만들 수 있습니다.

1

는 비트 표현을 할 자바 비트 벡터를 작성하십시오 :이/당신이 설정할 수 있습니다 비트 스트림에서 개별 비트를 다시 설정해야합니다.

비트 스트림은 따라서 귀하의 허프만 인코딩을 보유 할 수 있습니다. 이것은 최선의 방법이며 번개도 빠릅니다.

Huffmann sample analysis here