BitFileInput.java 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /***
  2. * Copyright (C) 2015 by Chang Liu <liuchang@cs.umd.edu>
  3. */
  4. package com.oblivm.backend.lang.inter.input;
  5. import java.io.BufferedReader;
  6. import java.io.File;
  7. import java.io.FileReader;
  8. import java.io.IOException;
  9. import java.util.stream.IntStream;
  10. import com.oblivm.backend.lang.inter.Input;
  11. /**
  12. * @author Chang Liu
  13. *
  14. */
  15. public class BitFileInput implements Input {
  16. private boolean[] array;
  17. private int current = 0;
  18. public static BitFileInput open(File file) throws IOException {
  19. BitFileInput input = new BitFileInput();
  20. BufferedReader binput = new BufferedReader(new FileReader(file));
  21. String str;
  22. StringBuffer sb = new StringBuffer();
  23. while ((str = binput.readLine()) != null) {
  24. sb.append(str);
  25. }
  26. binput.close();
  27. IntStream ins = sb.toString().chars();
  28. int[] a = ins.toArray();
  29. input.array = new boolean[a.length];
  30. for (int i = 0; i < a.length; ++i) {
  31. input.array[i] = a[i] == '1';
  32. }
  33. input.current = 0;
  34. return input;
  35. }
  36. private BitFileInput() {
  37. }
  38. @Override
  39. public boolean nextBoolean() {
  40. if (current >= array.length)
  41. return false;
  42. return array[current++];
  43. }
  44. @Override
  45. public boolean[] readAll() {
  46. return array;
  47. }
  48. @Override
  49. public boolean isEnd() {
  50. return current >= array.length;
  51. }
  52. @Override
  53. public boolean closed() {
  54. return current >= array.length;
  55. }
  56. public static BitFileInput open(String path) throws IOException {
  57. return open(new File(path));
  58. }
  59. }