使用ParseInt
  在你的代码里操作二进制数字的便利方法是使用Integer.parseInt()方法。Integer.parseInt(“101″,2)代表着把二进制数101转换为十进制数(5)。这意味着,利用这个方法你甚至可以在for循环里使用二进制数字:
  /* 从5到15的循环 */
  for (int b = Integer.parseInt("0101",2); b <= Integer.parseInt("1111",2); b++) {
  /* 做些什么 */
  }
  位读写
  建议:自己实现一个用来把二进制位(比特)转换为流并读写的类,尽量不要使用Java的输入输出流,因为Java的流只能按字节操作。你会觉得“给我接下来的N个比特”和“把指针往前移M位”这种功能是非常实用的。比如,你可以读取足够的数据来确定长的霍夫曼编码的长度,当你得到你刚刚读取的霍夫曼编码的实际长度之后,你可以把指针往前移相应长度。一个这样的类可以把位运算丑陋的一面划分成一个眼熟的代码块。
  类似的,如果你追求速度的话,那你会意外的发现表查找是如此强大。假如你有一个霍夫曼编码以0开头,并且其他的编码长度均为3而且以1开头,这意味着你需要一个可以容纳8(2^3)个项的表格,你的表格可能是这样的:
  char code[8];
  int codelen[8];
  code[0] = 'a'; codelen[0] = 1;
  code[1] = 'a'; codelen[1] = 1;
  code[2] = 'a'; codelen[2] = 1;
  code[3] = 'a'; codelen[3] = 1;
  code[4] = 'b'; codelen[4] = 3;
  code[5] = 'c'; codelen[5] = 3;
  code[6] = 'd'; codelen[6] = 3;
  code[7] = 'e'; codelen[7] = 3;
  通过两次查找,你可以定位到你要找的字符,并且还可以知道下一个字符在前面多少位置。这可要比某些一遍遍的循环去查找全部字符要划算的多,也更节省内存。
  课后作业:用代码实现以上表格的自动生成。想要更刺激的话,允许表格中的比特可变长。如果要查找的字符不在当前表,那自动往下一个表去找,这是一种空间换时间的办法。