나는 모든 파일을 허프만 코드로 인코딩하려고한다. 심볼 당 비트 수 (허프만 코드)를 발견했습니다. 읽고 비트에 의해 파일 비트에 쓰기 기존의 클래스가 아닌 문자의 최소 크기로 :자바로 허프만 코딩
는 자바 파일로 문자를 인코딩 할 수 있습니까? 당신은 정말 파일에 하나의 비트를 쓰고 싶지 않아
나는 모든 파일을 허프만 코드로 인코딩하려고한다. 심볼 당 비트 수 (허프만 코드)를 발견했습니다. 읽고 비트에 의해 파일 비트에 쓰기 기존의 클래스가 아닌 문자의 최소 크기로 :자바로 허프만 코딩
는 자바 파일로 문자를 인코딩 할 수 있습니까? 당신은 정말 파일에 하나의 비트를 쓰고 싶지 않아
는, 날 믿어. 보통 우리는 바이트 버퍼를 정의하고, 메모리에 "파일"을 빌드하고, 모든 작업이 완료된 후 전체 버퍼를 작성합니다. 그렇지 않으면 영원히 (거의) 걸릴 것입니다.
비트 벡터이 필요한 경우 colt library을 살펴보십시오. 단일 비트를 쓰고 자한다면이 모든 비트 이동 작업을 수행하지 않는 것이 좋습니다.
나는 허프만 클래스가 거기서 확신 해요,하지만 난 그들이있는 곳의 바로 잘 모르는 것 같아요. 자신 만의 롤을 만들고 싶다면이 봄에 할 수있는 두 가지 방법을 즉시 생각해보십시오.
첫 번째는 마스크 및 시프트 연산자를 사용하여 메모리 my에있는 비트 문자열을 어셈블하고 비트를 더 큰 데이터 객체 (즉 int 또는 longs)에 축적 한 다음 표준 스트리밍을 사용하여 파일에 기록합니다.
두 번째로 더 야심적이고 독립적 인 아이디어는 단일 비트를 작성하는 메소드가있는 OutputStream 구현을 작성한 다음이 OutputStream 클래스가 앞서 설명한 버퍼링/시프 팅/누적을 수행하고 아마도 결과를 랩핑 된 두 번째 OutputStream으로 낮 춥니 다.
당신은 당신이 그것을 만들로 인코딩을 저장이 완료되면 단순히 파일에 문자열 표현을 작성하는 BitSet을 만들 수 있습니다.
는 비트 표현을 할 자바 비트 벡터를 작성하십시오 :이/당신이 설정할 수 있습니다 비트 스트림에서 개별 비트를 다시 설정해야합니다.
비트 스트림은 따라서 귀하의 허프만 인코딩을 보유 할 수 있습니다. 이것은 최선의 방법이며 번개도 빠릅니다.
당신은 작업 (빠른) 여기에 구현 찾을 수 있습니다 http://code.google.com/p/kanzi/source/browse/src/kanzi/entropy/HuffmanTree.java
은 그냥 그 BitVector 바라 보았다. 그는 여전히 ByteBuffer에 쓰기 위해 backing'byte []'를 얻을 필요가 있습니다. 내가 뭐 놓친 거 없니? – alphazero