파일에서 17 비트 블록을 읽는 코드를 작성하려고하는데이 작업을 수행하는 방법을 모릅니다. crc 알고리즘을 적용하려면 다음 17 비트를 읽어야합니다.파일에서 특정 비트 수 가져 오기 Java
0
A
답변
3
오늘 오후에 뭔가 프로그래밍을 느꼈습니다.
아래의 클래스 BitReader
은 readBits
메서드를 통해 한 번에 최대 8 비트를 읽거나 readBits17
메서드를 통해 17 비트를 읽는 것을 허용합니다.
소스 코드
public class BitReader {
private static final int[] MASK = new int[16];
static {
for (int i = 0; i < 16; i++) {
MASK[i] = (1 << i) - 1;
}
}
private InputStream in;
private int bitsLeft;
private int bitBuffer;
public BitReader(InputStream in) {
this.in = in;
}
/**
* Reads at most 8 bits from the InputStream.
*
* @param bits
* between 1 and 8 (inclusive)
*/
public int readBits(int bits) throws IOException {
if (bits < 1 && bits > 8)
throw new IllegalArgumentException("bits");
if (bits > bitsLeft) {
int r = in.read();
if (r == -1) {
throw new EOFException();
}
bitsLeft += 8;
bitBuffer = (bitBuffer << 8) | r;
}
int result = bitBuffer >> (bitsLeft - bits);
bitsLeft -= bits;
bitBuffer &= MASK[bitsLeft];
return result;
}
public int readBits17() throws IOException {
return readBits(8) << 9 | readBits(8) << 1 | readBits(1);
}
}
클래스 Test
은 BitReader
를 사용하는 방법을 보여줍니다.
public class Test {
public static void main(String[] args) throws IOException {
// 1 00000010 01000011 = 65536 + 2 * 256 + 67 = 66115
// Creating a stream that repeats this number twice
// 10000001 00100001 1, 10000001 00100001 1
// 10000001 00100001 11000000 10010000 11[000000] = 129, 33, 192, 144, 192
byte[] data = { (byte) 129, 33, (byte) 192, (byte) 144, (byte) 192 };
ByteArrayInputStream in = new ByteArrayInputStream(data);
BitReader br = new BitReader(in);
// Should print 66115, 66115, 0
System.out.println(br.readBits17());
System.out.println(br.readBits17());
System.out.println(br.readBits(6));
}
}
(저작권 :. 그들이 맞는 볼 모든 사람이 사용할 수 있도록 본인은, 공개 도메인에이 코드를 삽입)
+0
감사합니다 !! 정말 좋은 직장, 고마워 !! – Fabiman89
관련 문제
- 1. Java 파일에서 Java 클래스 이름 가져 오기
- 2. 비트 맵의 특정 사각형 영역 가져 오기
- 3. pcap 파일에서 특정 정보 가져 오기
- 4. Dynamicaly 파일에서 특정 dict 가져 오기
- 5. PHP 파일에서 특정 데이터 가져 오기
- 6. Java 소스 파일에서 클래스 주석 가져 오기
- 7. 텍스트 파일에서 가져 오기 Java question
- 8. 파일에서 특정 블록 블록 가져 오기
- 9. XML 파일에서 특정 태그의 속성 가져 오기
- 10. 문자열 파일에서 특정 요소 가져 오기
- 11. 텍스트 파일에서 특정 문자열 가져 오기
- 12. txt 파일에서 특정 양의 데이터 가져 오기
- 13. XML 파일에서 특정 결과 가져 오기
- 14. Java : 파일의 특정 줄에서 정보 가져 오기
- 15. Java 데이터베이스에서 특정 필드 가져 오기
- 16. 비트 맵 가져 오기.
- 17. Java 특정 시간대의 모든 시간대 가져 오기
- 18. 파일에서 설정 가져 오기
- 19. 파일에서 NSData 가져 오기
- 20. JSP 파일에서 클래스 가져 오기
- 21. XSD 파일에서 가져 오기
- 22. 파일에서 Scriptblock 가져 오기
- 23. YAML 파일에서 가져 오기
- 24. 파일에서 데이터 가져 오기
- 25. 큰 디렉토리 (작업 공간)의 파일에서 특정 단어 가져 오기
- 26. 텍스트 파일에서 공식 가져 오기
- 27. 특정 텍스트의 텍스트 가져 오기?
- 28. java : 가져 오기 데이터를 확인할 수 없습니다. 가져 오기 data.Frame
- 29. bitmapdescriptor에서 비트 맵 가져 오기
- 30. TXT 파일에서 ArrayList 가져 오기
당신이 17 비트를 표현하려면 어떻게; 하나의'int' 또는'byte [] ', 또는 다른 방법으로? –
4 바이트를 가지고 있고 Int가 2 바이트 만 가지고 있기 때문에 17 비트가 필요하지만, 17 비트 만 선택할 생각이 없습니다. – Fabiman89
아니요, Java에서는 'int'는 항상 32 비트를 가지고 있습니다. 그러나 그것은 서명 된 값입니다. Java의'short'는 16 비트입니다. –