HaniiPuppy

Saving a grid of binary values.

Aug 23rd, 2016
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.38 KB | None | 0 0
  1. Example code from http://stackoverflow.com/questions/9349519/how-to-convert-boolean-array-to-binary-and-vice-versa-in-java
  2.  
  3. private static void writeBooleans(OutputStream out, boolean[] ar) throws IOException
  4. {
  5.     for (int i = 0; i < ar.length; i += 8)
  6.     {
  7.         int b = 0;
  8.         for (int j = Math.min(i + 7, ar.length-1); j >= i; j--)
  9.         {
  10.             b = (b << 1) | (ar[j] ? 1 : 0);
  11.         }
  12.         out.write(b);
  13.     }
  14. }
  15.  
  16. private static void readBooleans(InputStream in, boolean[] ar) throws IOException
  17. {
  18.     for (int i = 0; i < ar.length; i += 8)
  19.     {
  20.         int b = in.read();
  21.         if (b < 0) throw new EOFException();
  22.         for (int j = i; j < i + 8 && j < ar.length; j++)
  23.         {
  24.             ar[j] = (b & 1) != 0;
  25.             b >>>= 1;
  26.         }
  27.     }
  28. }
  29.  
  30. My code, with variable names changed for clarity and consistency with the above example:
  31.  
  32. Grid is a square of GridSize height and width.
  33.  
  34. For writing:
  35.  
  36. for(int y = 0; y < gridSize; y++)
  37. {
  38.     for(int i = 0; i < gridSize; i += 8)
  39.     {
  40.         int b = 0;
  41.        
  42.         for(int j = Math.min(i + 7, gridSize - 1); j >= i; j--)
  43.             b = (b << 1) | (grid.get(i, y) ? 1 : 0); // if grid were a boolean[][], grid.get(i, y) would be grid[i][y]
  44.        
  45.         output.write(b);
  46.     }
  47. }
  48.  
  49. For reading:
  50.  
  51. for(int y = 0; y < gridSize; y++)
  52. {
  53.     for(int i = 0; i < gridSize; i += 8)
  54.     {
  55.         int b = input.read();
  56.  
  57.         if(b < 0)
  58.             throw new EOFException();
  59.  
  60.         for(int j = i; j < i + 8 && j < gridSize; j++)
  61.         {
  62.             grid.set(j, y, (b & 1) != 0); // Or, if grid were a boolean[][], grid[j][y] = (b & 1) != 0;
  63.             b >>>= 1;
  64.         }
  65.     }
  66. }
  67.  
  68.  
  69. My code, with actual variable names:
  70.  
  71. For writing:
  72.  
  73. for(int y = 0; y < regionSize; y++)
  74. {
  75.     for(int x = 0; x < regionSize; x += 8)
  76.     {
  77.         int b = 0;
  78.        
  79.         for(int i = Math.min(x + 7, regionSize - 1); i >= x; i--)
  80.             b = (b << 1) | (region.get(x, y) ? 1 : 0);
  81.        
  82.         output.write(b);
  83.     }
  84. }
  85.  
  86. For reading:
  87.  
  88. for(int y = 0; y < regionSize; y++)
  89. {
  90.     for(int x = 0; x < regionSize; x += 8)
  91.     {
  92.         int b = input.read();
  93.  
  94.         if(b < 0)
  95.             throw new EOFException();
  96.  
  97.         for(int i = x; i < x + 8 && i < regionSize; i++)
  98.         {
  99.             region.set(i, y, (b & 1) != 0);
  100.             b >>>= 1;
  101.         }
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment